Задать вопрос
@Bustiks

(customtkinter) Как передать значение элемента из одного файла в другой?

У меня есть два файла: bottom_menu.py и right_menu.py, в котором я создаю класс RightMenu. В этом классе, например, есть чекбокс. Я создаю функцию get_checkbox(self), которая через метод get получает значение чекбокса. Когда я вызываю эту функцию в файле right_menu.py, она корректно возвращает значение.

Однако, когда я импортирую класс RightMenu в файл bottom_menu.py, создаю его экземпляр и пытаюсь вызвать функцию get_checkbox() через этот экземпляр, функция работает, но всегда возвращает 0, независимо от того, в каком состоянии находится чекбокс.

class RightMenu(ctk.CTkFrame):
    def __init__(self, master, *args, **kwargs):
        super().__init__(master, *args, **kwargs)

        self.right_menu = ctk.CTkFrame(self, width=200, corner_radius=0, border_color="#242323", border_width=1)
        self.right_menu.pack(side="right", fill="y", expand=False)

        self.checkbox = ctk.CTkCheckBox(self.right_menu, text="Contrast", width=100, height=25, command=self.toggle_slider)
        self.checkbox.pack(padx=10, pady=10, anchor="w")

def get_effects(self):
        contrast = self.checkbox.get()
        print(contrast)
        return contrast


class BottomMenu(ctk.CTkFrame):
    def __init__(self, master=None, start_video_callback=None, stop_video_callback=None):
        super().__init__(master=master, corner_radius=0, height=100, border_color="#242323", border_width=1)

        self.right_menu = RightMenu(self)

def on_apply_changes_click(self):
        # Получаем значение слайдера контраста из RightMenu
        checkbox_value = self.right_menu.get_effects()
        print(f"Текущее значение чекбокса: {checkbox_value}")


Тут не весь код файлов если что
  • Вопрос задан
  • 50 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@eminsk
программирую на python
В следующем коде 3 файла мои и все нормально работает.
когда чек бокс выбран будет 1 а когда чек бокс не выбран то будет 0
сохрани все эти файлы рядом по именам чтобы все файлы были рядом и формате UTF-8

# main.py
import customtkinter as ctk
from right_menu import RightMenu
from bottom_menu import BottomMenu

def main():
    root = ctk.CTk()
    root.geometry("600x400")
    root.title("Demo передачи значения между меню")
    right = RightMenu(root)
    right.pack(side="right", fill="y")
    bottom = BottomMenu(root, right_menu=right)
    bottom.pack(side="bottom", fill="x")

    root.mainloop()

if __name__ == "__main__":
    main()


# right_menu.py
import customtkinter as ctk
class RightMenu(ctk.CTkFrame):
    def __init__(self, master, **kwargs):
        super().__init__(master, **kwargs)
        self.right_menu = ctk.CTkFrame(self,
                                       width=200,
                                       corner_radius=0,
                                       border_color="#242323",
                                       border_width=1)
        self.right_menu.pack(side="right", fill="y")
        self.checkbox = ctk.CTkCheckBox(
            self.right_menu,
            text="Contrast",
            width=100,
            height=25,
            command=self.toggle_slider
        )
        self.checkbox.pack(padx=10, pady=10, anchor="w")

    def toggle_slider(self):
        print("Checkbox toggled, now:", self.checkbox.get())

    def get_effects(self):
        """
        Возвращает текущее состояние чекбокса:
        1 — включён; 0 — выключен.
        """
        return self.checkbox.get()


# bottom_menu.py
import customtkinter as ctk
class BottomMenu(ctk.CTkFrame):
    def __init__(self, master, right_menu, **kwargs):
        super().__init__(master, corner_radius=0, height=100,
                         border_color="#242323", border_width=1, **kwargs)
        self.right_menu = right_menu
        apply_btn = ctk.CTkButton(
            self,
            text="Применить",
            command=self.on_apply_changes_click
        )
        apply_btn.pack(padx=10, pady=10, anchor="e")

    def on_apply_changes_click(self):
        checkbox_value = self.right_menu.get_effects()
        print(f"Текущее состояние чекбокса Contrast: {checkbox_value}")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы