【问题标题】:Passing 'StringVar()' to new window using Tkinter使用 Tkinter 将“StringVar()”传递到新窗口
【发布时间】:2015-09-03 21:44:47
【问题描述】:

我目前正在尝试使用 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()

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

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

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

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    您正在创建Tk 的两个独立实例。你不应该那样做。一个原因是因为这个确切的问题:您不能在它们之间共享小部件或 tkinter 变量的实例。

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

    【讨论】:

    • 谢谢你的建议,布莱恩!现在一切正常。我不知道你不能在两个不同的实例之间共享 tkinter 变量。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多