从另一个脚本调用时,tkinter py 脚本会给出不同的输出
tkinter py script gives different output when called from another script
我在 .py 文件中编写了一个脚本,我想从我的程序的另一个主文件中调用它。但是当我这样做时,它不会初始化并提供与直接运行时相同的输出。
这是主文件的代码,我在其中将子测试文件作为模块导入并在用户单击按钮时调用它:
#!/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()
这里是包含应在 320 处初始化的条目文本框的子测试文件的代码。这是该问题的一个简化示例。当直接执行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()
一个程序中只能有一个 Tk
实例。当您使用其他模块时,您正在创建第二个根 window。为了能够在第一个模块中使用第二个模块,它无法创建自己的根 window.
我在 .py 文件中编写了一个脚本,我想从我的程序的另一个主文件中调用它。但是当我这样做时,它不会初始化并提供与直接运行时相同的输出。
这是主文件的代码,我在其中将子测试文件作为模块导入并在用户单击按钮时调用它:
#!/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()
这里是包含应在 320 处初始化的条目文本框的子测试文件的代码。这是该问题的一个简化示例。当直接执行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()
一个程序中只能有一个 Tk
实例。当您使用其他模块时,您正在创建第二个根 window。为了能够在第一个模块中使用第二个模块,它无法创建自己的根 window.