首页 文章

使用Tkinter将'StringVar()'传递到新窗口

提问于
浏览
0

我目前正在尝试使用GUI来创建一个小应用程序,该GUI可以从网站中提取天气并在窗口中显示结果 . 我已经让它在没有GUI和GUI的情况下工作,但是当我编写后者时,它只是在一个脚本中并且不是很有条理 . 因为它是如此无组织,我决定制作一个单独的脚本,在调用类时绘制GUI .

GUI的一部分是一个“条目”框,可以通过Tkinter添加 . 输入框将其内容存储到StringVar()中,并且可以使用.get()显示该内容 . 当我将所有未组织的内容编写到一个脚本中时,这种方法很好,但我不能为我的生活弄清楚如何在我的程序中将这个StringVar()从一个方法传递给另一个方法 . 这就是它的样子:

from Tkinter import *
import Forecast


class Frames(object):

    def __init__(self):
        pass

    def main_frame(self):
        main = Tk()
        main.title('WeatherMe')
        main.geometry('300x100')

        query = StringVar()

        Label(main, text='Enter a city below').pack()
        Entry(main, textvariable=query).pack()
        Button(main, text="Submit", command=self.result_frame).pack()

        main.mainloop()

    def result_frame(self):

        result = Tk()
        result.title('City')
        result.geometry('600x125')

        Button(result, text="OK", command=result.destroy).pack()


        result.mainloop()

基本上我的目标是在程序启动时打开一个窗口,其中包含标签,输入框和提交按钮 . 在输入框中输入城市并提交后,单击将打开一个显示结果的新窗口 .

因为条目位于第一个窗口,所以我需要将entry的StringVar()值传递给第二个窗口,这样它就可以提取数据并显示标签 . 无论我尝试它似乎都不起作用,我要么得到一个404错误意味着该字符串有问题,使得链接尝试从无效或连接错误中获取响应'无法连接str和实例对象' .

我也尝试将StringVar()保存为任一方法之外的变量,但问题是我需要在StringVar()之前调用另一个Tk()实例 .

1 回答

  • 1

    您正在创建两个单独的 Tk 实例 . 你不应该在它们之间共享小部件或tkinter变量的实例 .

    如果需要多个窗口,请创建一个根窗口,然后创建一个或多个 Toplevel 实例 . 另外,仅为根窗口调用 mainloop .

相关问题