簡體   English   中英

在另一個 Tkinter 類的一個 Tkinter 類中編輯/添加 Tkinter 小部件

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

假設我有兩個 tkinter 類充當單獨的窗口。 我如何從另一個 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()

我認為最好為您的兩個窗口(或至少其中一個)使用 Toplevel 小部件。 現在您的第一個窗口將被創建,代碼將在到達 root.mainloop() 行時停止。 在您關閉第一個窗口之前,不會創建第二個窗口。

您可以傳入每個類的引用。

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