如何在Linux中显示tkinter窗口
我正在跟着一本叫《Python Programming for Kids》的书学习。我和一群邻居的小朋友们一起,想用树莓派作为我们的电脑来降低成本。我平时用的是Windows系统,比较喜欢用WxPython这个图形界面工具。现在我在为下周的课程做准备,但遇到了一个问题。我输入了下面的代码:
from tkinter import *
tk = Tk()
btn = Button(tk,text = 'click me')
btn.pack()
根据书上的说法,第二行应该创建一个窗口(在Wx的世界里我想叫它框架),第三行定义了一个按钮对象,第四行把这个按钮放进窗口里。
可是,这个代码并没有生效——tk窗口没有显示出来,屏幕上也没有按钮,我不知道为什么。tkinter已经导入了,当我输入dir(tk)时,tk对象有很多方法和属性可见,所以我知道我们的树莓派上有tkinter。
再说一次,输入这段代码后什么都没有显示。我删除了与创建按钮相关的代码,结果还是没有任何反应,所以我不知道该从哪里开始排查问题。我在网上搜索了信息,但没有找到有用的资料。
如果有人能提供一些见解,我会很感激。
我在superuser上问过这个问题,但没有Tkinter标签,所以……
嗯,我需要一个
tk.pack()
语句吗?我会再回来报告进展的。
1 个回答
不,你不需要使用 tk.pack()
。你真正需要的是启动事件循环。事件循环,顾名思义,就是一个处理事件的循环。在Tkinter中,所有的操作都是对某个事件的响应,包括在屏幕上绘制小部件或窗口。
在你的文件最后一行,添加以下内容:
tk.mainloop()
我建议你不要像现在这样导入模块。我知道很多Tkinter的教程都是这样做的,但这其实是不好的做法。你应该这样做:
import tkinter as tk
root = tk.Tk()
btn = tk.Button(root, text='click me')
btn.pack()
root.mainloop()
虽然这样每个小部件需要多输入三个字符,但这样写的代码在以后的维护上会更简单。
PEP8 是官方的Python风格指南,它明确建议避免使用通配符导入:
通配符导入(from import *)应该避免,因为这样会让命名空间中的名称变得不清晰,容易让读者和许多自动化工具感到困惑。通配符导入有一个可以辩护的使用场景,就是将内部接口作为公共API的一部分重新发布(例如,用可选加速模块中的定义覆盖纯Python实现的接口,而具体会覆盖哪些定义事先并不清楚)。