以下代码在MS Windows中正常工作(按时脚本将退出q):
q
import Tkinter as tk class App(): def __init__(self): self.root = tk.Tk() self.root.geometry("{0}x{1}+0+0".format( self.root.winfo_screenwidth(), self.root.winfo_screenheight()) ) self.root.overrideredirect(True) tk.Label(text="some text here").grid() self.root.bind('q', self.appexit) self.root.mainloop() def appexit(self, event): self.root.destroy() App()
我试图在“无窗口管理器”的Debian环境中运行它(引导至控制台,运行startx,它通过.xinitrc(那里唯一的命令)启动脚本)。
startx
.xinitrc
该脚本按预期方式启动,但按q任何操作均不执行任何操作(我原本希望X关闭并返回至文本控制台)。后来我尝试添加,以防万一self.root.focus(),mainloop()但这并没有帮助。
X
self.root.focus()
mainloop()
MS Windows和Debian环境之间这种不同行为的原因可能是什么?
使用overrideredirect程序会失去与窗口管理的联系,因此似乎无法获得有关按键的信息,甚至无法获得焦点。
MS Windows是一个大的窗口管理器,因此似乎overrideredirect无法在该系统上运行。
overrideredirect
也许您可以self.root.attributes('-fullscreen', True)代替self.root.overrideredirect(True)
self.root.attributes('-fullscreen', True)
self.root.overrideredirect(True)
顺便说一句:我用于测试self.root.after(5000, self.root.destroy)-在无法控制5秒后杀死窗口。
self.root.after(5000, self.root.destroy)
编辑:
一些(有效的)示例fullscreen。
fullscreen
overrideredirect在Linux上使用时,程序可以获取键盘事件,因此绑定不起作用,并且您无法集中注意力Entry()。但是鼠标和Button()作品。overrideredirect适用于带或不带按钮的“启动画面”。
Entry()
Button()
import Tkinter as tk class App(): def __init__(self): self.root = tk.Tk() # this works self.root.attributes('-fullscreen', True) # this doesn't work #self.root.overrideredirect(True) #self.root.geometry("800x600+100+100") # to see console behind #self.root.after(5000, self.appexit) # to kill program after 5s self.root.bind('q', self.q_pressed) tk.Label(text="some text here").grid() e = tk.Entry(self.root) e.grid() e.focus() # focus doesn't work with overrideredirect tk.Button(self.root, text='Quit', command=self.appexit).grid() self.root.mainloop() def q_pressed(self, event): print "q_pressed" self.root.destroy() def appexit(self): print "appexit" self.root.destroy() App()