Tkinter 先学还是 PyQt?

4

我试图通过进行一些GUI开发来巩固我的Python知识,我应该尝试Tkinter还是直接转向PyQT以获得更好的IDE支持?


你想要构建哪种类型的图形用户界面? - Harvey
我现在只是刚开始学习,所以等我掌握了基础知识后,我会开发一个基于Windows标准模式计算器的跨平台计算器。之后呢,说不定会尝试开发一些更复杂的应用,比如使用Google或Bing Maps的调度应用程序。 - user3533659
我同意这个答案,tkinter 可能更适合你的需求! - Harvey
2个回答

2
如果您的主要目标是巩固您的Python知识,我建议使用Tkinter。它更简单,并且已经与Python一起安装。
如果您想构建复杂的应用程序,我推荐使用PyQt,它更加强大。

一个基于 Windows 标准模式计算器的跨平台计算器对于 Tkinter 来说,是否足够简单? - user3533659
在我看来,是的。你只需要几个按钮和一个文本小部件。 - Amaury Medeiros
你组织布局的方式由你决定。我认为你会使用几个布局,而不仅仅是一个。然而,我猜网格布局是组织按钮的一个非常好的选择。 - Amaury Medeiros
什么小部件可以作为文本小部件和网格的容器? - user3533659
我认为“更强大”有点夸张了。尽管您不能轻松地执行一堆漂亮的动画或嵌入网页,但对于大多数人使用Python GUI工具包的目的,Tkinter已经足够强大了。 - Bryan Oakley

2
我发现PyQt5和Tkinter在长时间运行循环和处理GUI冻结方面有很大的区别。
在Tkinger和PyQt5中,由于GUI更新程序未被调用,长循环期间GUI将会冻结。为了解决这个问题,在Tkinter中我添加了以下代码:
Tkinter 解决方案
def update_app():
    root_winwod.update_idletasks()
    root_winwod.update()

for x in range(10000):
    if x % 100 = 0: # Triggers after 100 iterations. You can change this for your needs.
        update_app()
    
    # The rest of your loop code here

PyQt5解决方案

对于PyQt5,您可以调用QtCore.QCoreApplication.processEvents(),但所有的网站都说不要这样做。相反,您必须创建一个子进程,使用multiprocessing.Manager()创建多进程安全变量,确保在访问它们时锁定和解锁变量,在子进程中使用subprocess.check_output()来尝试并捕获错误,在Qtimer()上添加定期更新UI,确保在应用程序退出时杀死进程等。

对于简单的应用程序,我建议运行Tkinter。运行子进程是可以的,但需要大量额外的编码和努力来确保您正确获取所有内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接