【问题标题】:tkMessageBox popup invisible when run from desktop, visible when run from boottkMessageBox 弹出窗口从桌面运行时不可见,从启动运行时可见
【发布时间】:2017-08-06 23:34:12
【问题描述】:

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

访问

sudo nano /etc/profile

在这里,我将目录更改为包含我的 python 文件的文件夹并让它加载我的代码,并在启动时正确加载我的按钮,并在按下正确的按钮时弹出窗口出现在全屏窗口上。但是,当我尝试通过桌面外壳运行我的代码时,按下按钮后,弹出窗口会出现,但隐藏在根窗口后面。我无法单击其他任何地方,按“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 几个星期,所以如果我遗漏了一些基本的东西,我深表歉意。我正在使用为树莓派制作的 8 英寸触摸屏显示器作为我的屏幕。

【问题讨论】:

    标签: python tkinter popup raspberry-pi tkmessagebox


    【解决方案1】:

    根据tcl/tk documentation

    为窗口设置覆盖重定向标志会导致它 被窗口管理器忽略;除其他外,这意味着 窗口不会从根窗口重新变成装饰性窗口 框架,用户将无法使用 正常的窗口管理器机制

    因此,窗口的行为并不总是符合预期(在 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 中,它会导致一个没有装饰的窗口,始终位于其他窗口的顶部,但消息框确实出现在它的顶部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2014-11-17
      • 2021-10-28
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 2013-08-22
      相关资源
      最近更新 更多