我正在尝试编写一个程序,允许用户在全屏Tkinter GUI中按下不同的按钮。这些按钮预先形成的操作对我的问题无关紧要,但是我无法创建弹出对话框(askokcancel)以确认用户想要按下按钮,然后正常运行其余的按钮代码,如果" ok& #34;被压了。目前,我有这个程序从启动到/ etc / profile文件运行,通过
访问sudo nano / etc / profile
这里我将目录更改为包含我的python文件的文件夹并让它加载我的代码,并在启动时正确加载我的按钮,按下正确的按钮后,弹出窗口出现在整个屏幕窗口上。但是,当我尝试通过桌面shell运行我的代码时,按下按钮后,弹出窗口会出现,但隐藏在根窗口后面。我无法点击其他任何地方,并按" tab"并且"输入"允许我在两个选项之间导航并选择一个,但无法看到它。我在shell中有按钮打印单词,所以我知道弹出窗口实际上就在那里。
全屏幕使用overrideredirect功能,隐藏任务栏和其他选项。当此设置为FALSE时,弹出窗口按预期工作,但我试图使GUI成为屏幕上唯一的东西。
以下是我的代码的精简版本:
from Tkinter import*
import tkMessageBox
class Application(Frame):
def run(self):
tkMessageBox.askokcancel("Run Confirmation!", "Are you sure?")
print "RUN Code Intitates"
def createWidgets(self):
self.button1 = Button(self,height=15,width=20)
self.button1["command"] = self.run
self.button1.pack({"side": "left"})
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()
root = Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.overrideredirect(1)
root.geometry("%dx%d+0+0" % (800, 480))
app = Application(master=root)
app.mainloop()
root.destroy()
我绝不是计算机科学专业,并且只使用了raspberry pi,tkinter和python几周,所以如果我遗漏了一些基本的东西,我会道歉。我正在使用8"用于覆盆子pi的触摸屏显示器作为我的屏幕。
答案 0 :(得分:-1)
设置窗口的override-redirect标志会导致它出现 被窗口管理器忽略;除此之外,这意味着 窗口不会从根窗口重新装饰成装饰 框架和用户将无法使用操作窗口 普通窗口管理器机制
因此窗口并不总是表现出预期(在Windows中情况就不那么好了)。例如,在Linux中,窗口不会获得键盘焦点(python tkinter overrideredirect; cannot receive keystrokes (Linux))。
如果您真正关心的是拥有全屏GUI,只需替换
root.overrideredirect(1)
通过
root.attributes('-fullscreen', True)
并且窗口将正常运行,因此消息框将显示在主窗口的顶部。
Linux中的另一种可能性是替换
root.overrideredirect(1)
通过
root.attributes('-type', 'dock')
这告诉窗口管理器将窗口视为一个停靠点,至少在XFCE中,它会导致一个没有装饰的窗口,总是在其他窗口的顶部,但消息框确实出现在它的顶部。