简体   繁体   English

在另一个 Tkinter 类的一个 Tkinter 类中编辑/添加 Tkinter 小部件

[英]Edit/add Tkinter widget in one Tkinter class from another Tkinter class

Suppose I have two tkinter classes which act as separate windows.假设我有两个 tkinter 类充当单独的窗口。 How could I edit any given widget from one class in the other tkinter class.我如何从另一个 tkinter 类中的一个类中编辑任何给定的小部件。 ALso, how could I add a widget in one tkinter class from the other tkinter class?另外,如何在另一个 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()

I think it would be better to use a Toplevel widget for your two windows (or at least one of them).我认为最好为您的两个窗口(或至少其中一个)使用 Toplevel 小部件。 Right now your first window will be created and the code will stop when it gets to the root.mainloop() line.现在您的第一个窗口将被创建,代码将在到达 root.mainloop() 行时停止。 The second window will not be created until you close the first one.在您关闭第一个窗口之前,不会创建第二个窗口。

And you can pass in a reference from each class.您可以传入每个类的引用。

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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM