gpt4 book ai didi

python - tkMessageBox 弹出窗口从桌面运行时不可见,从引导运行时可见

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:31 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,允许用户在全屏 Tkinter GUI 中按下不同的按钮。这些按钮执行的操作对我的问题无关紧要,但我无法创建弹出对话框(askokcancel)来确认用户想要按下按钮,然后如果按下“确定”则正常运行该按钮的其余代码.目前,我通过/etc/profile 文件从引导运行这个程序,通过访问

sudo nano/etc/profile

在这里,我将目录更改为包含我的 python 文件的文件夹,并让它加载我的代码,并在启动时正确加载我的按钮,并在按下正确的按钮后,弹出窗口出现在全屏窗口上。但是,当我尝试通过桌面 shell 运行我的代码时,按下按钮后,弹出窗口会出现,但隐藏在根窗口后面。我无法点击其他任何地方,按“tab”和“enter”可以让我在两个选项之间导航并选择一个,但看不到它。我在 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 几个星期,所以如果我遗漏了一些基本的东西,我深表歉意。我正在使用为 raspberry pi 制作的 8"触摸屏显示器作为我的屏幕。

最佳答案

根据tcl/tk documentation :

Setting the override-redirect flag for a window causes it to be ignored by the window manager; among other things, this means that the window will not be reparented from the root window into a decorative frame and the user will not be able to manipulate the window using the normal window manager mechanisms

因此窗口并不总是按预期运行(在 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 中,它会产生一个没有装饰的窗口,它始终位于其他窗口之上,但消息框确实出现在它之上。

关于python - tkMessageBox 弹出窗口从桌面运行时不可见,从引导运行时可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42823146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com