我想知道如何在tkinter中将返回值从一个类传递到另一个类。
在我的程序中,我有一个DataChosenForm
类,我想在Combobox
中选择选项,并将这个结果传递给另一个类ReturnData
,以便在Label
中设置一个变量。在
import tkinter as tk
from tkinter import ttk
class DataChosenForm(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
chosen = tk.LabelFrame(self, text="wybór")
chosen.grid(row=0)
self.combo = ttk.Combobox(chosen)
self.combo['values'] = ('wizz', 'ryanair', 'lot')
self.combo.grid(row=0, column=2, padx=80, pady=10)
self.combo.bind("<<ComboboxSelected>>", self.callback)
def callback(self, event=None):
if event.widget.get() == 'wizz':
print('wizz')
return 'wizz'
elif event.widget.get() == 'ryanair':
print('ryanair')
return 'ryanair'
elif event.widget.get() == 'lot':
print('lot')
return 'lot'
class ReturnData(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
var = tk.StringVar()
message_box = tk.LabelFrame(self, text="wynik")
message_box.grid(row=1)
mb = tk.Label(message_box, textvariable=var,anchor='nw')
mb.pack(padx=120, pady=30)
class Application(tk.Tk):
def __init__(self):
super().__init__()
self.title("program do wyszukiwania cen lotów")
self.geometry('300x200')
self.resizable(width=False, height=False)
DataChosenForm(self).grid(row=0, column=0)
ReturnData(self).grid(row=1)
if __name__ == "__main__":
app = Application()
app.mainloop()
您可以先显示组合框
DataChosenForm(self).grid(row=0, column=0)
,而不调用Application
类中的ReturnData
。在然后,在
callback()
方法中收集选择choice = event.widget.get()
,并将其传递给ReturnData
。但是,这意味着LabelFrame
只有在做出选择之后才会显示。在我认为@Julia对于您的tkinter应用程序来说基本上是正确的体系结构,但是她的答案可以通过使用tkinter}被更改(由其中一个或其他东西更改)时,所有与之关联的小部件都会自动更新其显示值。在
Variable
来改进——因为当{这里有一些关于Variable Classes的文档。请注意,由于
ttk.Combobox
with具有tk.Entry
小部件的所有方法,这里有一些关于它们的文档(这也正好说明了将StringVar
与一个小部件结合使用的“模式”,因此它也适用于ttk.Combobox
)。在通常,在创建小部件时,可以通过指定一个实例作为option
textvariable=
关键字参数来告诉小部件使用tkinterVariable
。您还可以使用大多数小部件支持的部分字典接口来设置选项,因此像widget['textvariable'] = variable
这样的赋值是另一种使用它们的方法—下面的代码使用这两种方法。在下面是Julia修改后使用
tk.StringVar
的代码。注意,Combobox
不需要一个回调函数来绑定<<ComboboxSelected>>
事件,因此所有的复杂性都被消除了。在相关问题 更多 >
编程相关推荐