如何避免 tkinter 在导入过程中弹出 window?
How to avoid tkinter from popping up a window during import?
有没有办法 运行 root = tk.Tk()
而不会弹出 window?
我正在使用 Python3.8.3 和 tkinter UI。我正在尝试从我的主脚本 运行 一个脚本(我将其称为副脚本,如果有更好的术语,我深表歉意)。这个想法是,用户将单击主脚本 window 上的按钮,然后将出现副脚本 window。如果我 运行 单独使用辅助脚本,它就可以正常工作。如果我从主脚本调用副脚本,则会出现错误,因为 root 是局部变量。我可以通过在辅助脚本中将 root 定义为全局变量来解决此错误。但是,当我这样做时,导入端会导致空的 tkinter window.
如果副脚本是:
def main():
root = tk.Tk()
app = MainApp(root)
root.mainloop()
if __name__ == "__main__":
main()
else:
pass
错误:未定义名称 'root',从主脚本调用时
如果副脚本是:
root = tk.Tk()
def main():
app = MainApp(root)
root.mainloop()
if __name__ == "__main__":
main()
else:
pass
root 现在是一个全局变量,但是 blank tkinter window 在导入这一行 root = tk.Tk()
期间弹出
你能推荐我一个克服这个问题的好方法吗?
为了避免 window 弹出,让辅助脚本将 root 作为参数。
旁白:
def main(my_root):
app = MainApp(my_root)
my_root.mainloop()
甚至比这更好,把所有东西都放在一个 class 里。这样,所有的东西都一起订购了,你不需要导入任何东西。此外,如果您打开的 window 是主 window 的子项,则可以使用 Toplevel。
How do I create child windows with Python tkinter?
Is there a way to run root = tk.Tk() without popping out a window?
不,没有。您的代码设计有缺陷。您不应该在全局级别导入具有该行代码的脚本。
最简单的解决方案是将那行代码移到 if
语句中,就像您在第一个块中所做的那样:
def main():
root = tk.Tk()
app = MainApp(root)
root.mainloop()
if __name__ == "__main__":
main()
如果您从抱怨全局变量 root
的代码的其他部分得到一些错误,错误出在该代码中,而不是在您导入的代码中。正确的解决方案是删除对全局变量的依赖。那,或者在 main
.
中声明 root
为全局
有没有办法 运行 root = tk.Tk()
而不会弹出 window?
我正在使用 Python3.8.3 和 tkinter UI。我正在尝试从我的主脚本 运行 一个脚本(我将其称为副脚本,如果有更好的术语,我深表歉意)。这个想法是,用户将单击主脚本 window 上的按钮,然后将出现副脚本 window。如果我 运行 单独使用辅助脚本,它就可以正常工作。如果我从主脚本调用副脚本,则会出现错误,因为 root 是局部变量。我可以通过在辅助脚本中将 root 定义为全局变量来解决此错误。但是,当我这样做时,导入端会导致空的 tkinter window.
如果副脚本是:
def main():
root = tk.Tk()
app = MainApp(root)
root.mainloop()
if __name__ == "__main__":
main()
else:
pass
错误:未定义名称 'root',从主脚本调用时
如果副脚本是:
root = tk.Tk()
def main():
app = MainApp(root)
root.mainloop()
if __name__ == "__main__":
main()
else:
pass
root 现在是一个全局变量,但是 blank tkinter window 在导入这一行 root = tk.Tk()
你能推荐我一个克服这个问题的好方法吗?
为了避免 window 弹出,让辅助脚本将 root 作为参数。
旁白:
def main(my_root):
app = MainApp(my_root)
my_root.mainloop()
甚至比这更好,把所有东西都放在一个 class 里。这样,所有的东西都一起订购了,你不需要导入任何东西。此外,如果您打开的 window 是主 window 的子项,则可以使用 Toplevel。 How do I create child windows with Python tkinter?
Is there a way to run root = tk.Tk() without popping out a window?
不,没有。您的代码设计有缺陷。您不应该在全局级别导入具有该行代码的脚本。
最简单的解决方案是将那行代码移到 if
语句中,就像您在第一个块中所做的那样:
def main():
root = tk.Tk()
app = MainApp(root)
root.mainloop()
if __name__ == "__main__":
main()
如果您从抱怨全局变量 root
的代码的其他部分得到一些错误,错误出在该代码中,而不是在您导入的代码中。正确的解决方案是删除对全局变量的依赖。那,或者在 main
.
root
为全局