【问题标题】:tkinter py script gives different output when called from another script当从另一个脚本调用时,tkinter py 脚本会给出不同的输出
【发布时间】:2016-11-16 16:41:33
【问题描述】:

我在 .py 文件中编写了一个脚本,我想从程序的另一个主文件中调用它。但是当我这样做时,它不会初始化并提供与直接运行时相同的输出。

这是我将 subTest 文件作为模块导入并在用户单击按钮时调用它的主文件的代码:

#!/usr/bin/python
import tkinter as tk
from tkinter import ttk

import subTest
from subTest import SubTest

class Window(tk.Tk):

    def __init__(self, parent):
        tk.Tk.__init__(self, parent)
        tk.Tk.wm_title(self, "Test")
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.geometry("600x300+30+30")
        label = tk.Label(self, text="Test")
        label.pack(pady=20,padx=10)
        self.button = ttk.Button(self, text='gotosubtest', command =   self.callsubtest)
        self.button.pack()

    def callsubtest(self):    
        app = SubTest(None)
        app.mainloop()   

if __name__ == "__main__":
    window = Window(None)
    window.mainloop()

下面是 subTest 文件的代码,其中包含应在 320 处初始化的 Entry 文本框。这是问题的简化示例。直接执行 subTest 时,该 Entry 默认值显示在文本框中。但是当从 main 调用 subTest 时,不会显示该值。 知道我的代码有什么问题吗?在此先感谢所有对 python 初学者有用的提示 ;)

#!/usr/bin/python
import tkinter as tk
from tkinter import Entry

class SubTest(tk.Tk):

    def __init__(self, parent):
        tk.Tk.__init__(self, parent)
        tk.Tk.wm_title(self, "SubTest")
        self.parent = parent
        self.initializesubtest()

    def initializesubtest(self):
        self.geometry("510x480")

        self.minx = tk.DoubleVar()
        self.minx.set(320)
        Entry(self, textvariable=self.minx,width=5).grid(row=21,column=1)
        tk.Label(self, text="Min X").grid(row=22,column=1)

if __name__ == "__main__":
    app = SubTest(None)
    app.mainloop()

【问题讨论】:

    标签: python tkinter tkinter-entry


    【解决方案1】:

    您只能在程序中拥有一个 Tk 实例。当您使用该其他模块时,您正在创建第二个根窗口。为了让您能够在第一个模块中使用第二个模块,它不能创建自己的根窗口。

    【讨论】:

    • 谢谢!似乎通过将 subTest 脚本 tk.Tk 替换为 Toplevel,它可以工作。
    猜你喜欢
    • 2018-06-10
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多