<p>我认为@Julia对于您的tkinter应用程序来说基本上是正确的体系结构,但是她的答案可以通过使用tkinter<code>Variable</code>来改进——因为当{<cd1>}被更改(由其中一个或其他东西更改)时,所有与之关联的小部件都会自动更新其显示值。在</p>
<p>这里有一些关于<a href="http://effbot.org/tkinterbook/variable.htm" rel="nofollow noreferrer">Variable Classes</a>的文档。请注意,由于<code>ttk.Combobox</code>with具有<code>tk.Entry</code>小部件的所有方法,这里有一些关于它们的文档(这也正好说明了将<code>StringVar</code>与一个小部件结合使用的“模式”,因此它也适用于<code>ttk.Combobox</code>)。在</p>
<p>通常,在创建小部件时,可以通过指定一个实例作为option <code>textvariable=</code>关键字参数来告诉小部件使用tkinter <code>Variable</code>。您还可以使用大多数小部件支持的部分字典接口来设置选项,因此像<code>widget['textvariable'] = variable</code>这样的赋值是另一种使用它们的方法—下面的代码使用这两种方法。在</p>
<p>下面是Julia修改后使用<code>tk.StringVar</code>的代码。注意,<code>Combobox</code><em>不需要一个回调函数来绑定<code><<ComboboxSelected>></code>事件,因此所有的复杂性都被消除了。在</p>
<pre><code>import tkinter as tk
from tkinter import ttk
class DataChosenForm(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
choice = tk.LabelFrame(self, text="wybór")
choice.grid(row=0)
self.combo = ttk.Combobox(choice)
self.combo['textvariable'] = parent.var # Use shared variable.
self.combo['values'] = ('wizzair', 'ryanair', 'lot')
self.combo.grid(row=0, column=2, padx=80, pady=10)
class ReturnData(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
message_box = tk.LabelFrame(self, text="wynik")
message_box.grid(row=1)
mb = tk.Label(message_box, textvariable=parent.var, # Use shared variable.
anchor='nw', width=20)
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)
self.var = tk.StringVar(value='Dokonać wyboru') # Create shared variable.
DataChosenForm(self).grid(row=0, column=0)
ReturnData(self).grid(row=1)
if __name__ == "__main__":
app = Application()
app.mainloop()
</code></pre>