Редактировать / добавить виджет Tkinter в одном классе Tkinter из другого класса Tkinter - PullRequest
0 голосов
/ 08 января 2020

Предположим, у меня есть два класса tkinter, которые действуют как отдельные windows. Как я могу отредактировать любой данный виджет из одного класса в другом классе tkinter. Кроме того, как я могу добавить виджет в один класс tkinter из другого класса tkinter?

from tkinter import Tk, Label, Button

class MyFirstGUI:
    def __init__(self, master):
        self.master = master
        master.title("A simple GUI")

        self.label = Label(master, text="This is 
        our first GUI!")
        self.label.pack()

        self.greet_button = Button(master, 
        text="Greet", command=self.greet)
        self.greet_button.pack()

        self.close_button = Button(master, 
        text="Close", command=master.quit)
        self.close_button.pack()

    def greet(self):
        print("Greetings!")

root = Tk()
my_gui = MyFirstGUI(root)
root.mainloop()

from tkinter import Tk, Label, Button

class MyFirstGUI2:
    def __init__(self, master):
        self.master = master
        master.title("A simple GUI")

        self.label = Label(master, text="This is 
        our first GUI!")
        self.label.pack()

        self.greet_button = Button(master, 
        text="Greet", command=self.greet)
        self.greet_button.pack()

        self.close_button = Button(master, 
        text="Close", command=master.quit)
        self.close_button.pack()

    def greet(self):
        print("Greetings!")

root = Tk()
my_gui = MyFirstGUI2(root)
root.mainloop()

1 Ответ

0 голосов
/ 08 января 2020

Я думаю, что было бы лучше использовать виджет Toplevel для ваших двух windows (или хотя бы одного из них). Прямо сейчас ваше первое окно будет создано, и код остановится, когда он достигнет строки root .mainl oop (). Второе окно не будет создано, пока вы не закроете первое.

И вы можете передать ссылку из каждого класса.

import tkinter
from tkinter import Tk, Label, Toplevel, Button

class MainWidget:
    def __init__(self, master):
        self.master = master
        self.widgetTwo = None

        self.label = Label(self.master, text='Widget One')
        self.label.pack()

class WidgetTwo(Toplevel):
    def __init__(self, master, mainWidget):
        Toplevel.__init__(self, master)
        self.master = master
        self.mainWidget = mainWidget

        self.labelTwo = Label(self, text='Widget Two')
        self.labelTwo.pack()

        Button(self, text='Change Main Widget Text', command=self.ChangeMainWidgetLabel).pack()

    def ChangeMainWidgetLabel(self):
        self.mainWidget.label.config(text='Widget One text changed')


mw = Tk()

mainWidget = MainWidget(mw)
widgetTwo = WidgetTwo(mw, mainWidget)
mainWidget.widgetTwo = widgetTwo

mw.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...