我之前发布了一些有关此问题的内容以及我认为如何解决我的问题,但它没有完全解决问题。基本上,当我点击'main_frame'方法中的按钮时,我正在寻找一种方法将StringVar()从我的第一个名为'main_frame'的方法传递到我的第二个方法'result_frame'。
from Tkinter import *
import Forecast
class Frames(object):
def __init__(self):
pass
def main_frame(self):
root = Tk()
root.title('WeatherMe')
root.geometry('300x100')
query = StringVar()
Label(root, text='Enter a city below').pack()
Entry(root, textvariable=query).pack()
Button(root, text="Submit", command=self.result_frame).pack()
root.mainloop()
def result_frame(self):
result = Toplevel()
result.title('City')
result.geometry('1600x150')
forecast = Forecast.GetWeather('City Here').fetch_weather()
Label(result, text='1-3 DAY: \n' + forecast[0]).pack()
Label(result, text='4-7 DAY: \n' + forecast[1]).pack()
Label(result, text='8-10 DAY: \n' + forecast[2]).pack()
Button(result, text="OK", command=result.destroy).pack()
正如您所看到的,一个窗口将有一个Entry框,您可以在其中键入城市。该条目将其内容保存到StringVar()。我想让'main_frame'方法中的按钮调用'result_frame'并使用我第一个窗口中的值。如果我向第二种方法添加一个参数,那么我必须立即在我的按钮中指定它,当然打开程序时我会立即调用它,我想避免。我很抱歉,如果这是一个简单的解决方案,我只是在这里失踪,我一直在努力解决这个问题。有人告诉我上次我发布这个只调用一个Tk()的实例,我在这里做了一个实例,并使用Toplevel()作为我的附加窗口,但是我仍然有问题将变量从一个窗口传递到另一个窗口。
答案 0 :(得分:3)
您的self
(对象)在__init__()
和result_frame()
中都是相同的,因此您可以将StringVar()
设置为实例变量,然后在result_frame()
方法,您可以从该实例变量中获取StringVar()
。
另外,我建议您不要在类的方法中执行root.mainloop()
,这会导致在实际关闭tkinter应用程序之前,对象永远不会在类之外完全可用(如果从__init__()
左右开始调用。而是在类外创建root
并将其作为变量传递。示例 -
from Tkinter import *
import Forecast
class Frames(object):
def __init__(self):
pass
def main_frame(self, root):
root.title('WeatherMe')
root.geometry('300x100')
self.query = StringVar()
Label(root, text='Enter a city below').pack()
Entry(root, textvariable=self.query).pack()
Button(root, text="Submit", command=self.result_frame).pack()
def result_frame(self):
result = Toplevel()
result.title('City')
result.geometry('1600x150')
print(self.query.get()) #This would print the StringVar's value , use this in whatever way you want.
forecast = Forecast.GetWeather('City Here').fetch_weather()
Label(result, text='1-3 DAY: \n' + forecast[0]).pack()
Label(result, text='4-7 DAY: \n' + forecast[1]).pack()
Label(result, text='8-10 DAY: \n' + forecast[2]).pack()
Button(result, text="OK", command=result.destroy).pack()
root = Tk()
app = Frames()
app.main_frame(root)
root.mainloop()