【问题标题】:How do I create a popup window in tkinter?如何在 tkinter 中创建弹出窗口?
【发布时间】:2017-01-30 22:04:45
【问题描述】:

我在为程序创建弹出窗口时遇到问题。

代码:

from tkinter import *
from tkinter import ttk
import tkinter as tk

def popupBonus():
    popupBonusWindow = tk.Tk()
    popupBonusWindow.wm_title("Window")
    labelBonus = Label(popupBonusWindow, text="Input")
    labelBonus.grid(row=0, column=0)
    B1 = ttk.Button(popupBonusWindow, text="Okay", command=popupBonusWindow.destroy())
    B1.pack()

class Application(ttk.Frame):
    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        mainwindow = ttk.Frame(self)

        self.buttonBonus = ttk.Button(self, text="Bonuses", command=popupBonus)
        self.buttonBonus.pack()

代码生成一个带有按钮的窗口,当您按下按钮时,它应该生成一个标题为“Window”、文本为“Input”的弹出窗口,并有一个按钮显示“Okay”退出弹出窗口并返回到主窗口。但是,我收到此错误。

 Traceback (most recent call last):
  File "D:\Softwares\Python 3.6.0\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
  File "C:\Users\J---- M--\Desktop\Python\GUI-Messagebox 5.py", line 12, in popupBonus
B1 = ttk.Button(popupBonusWindow, text="Okay", command=popupBonusWindow.destroy())
  File "D:\Softwares\Python 3.6.0\lib\tkinter\ttk.py", line 614, in __init__
Widget.__init__(self, master, "ttk::button", kw)
  File "D:\Softwares\Python 3.6.0\lib\tkinter\ttk.py", line 559, in __init__
tkinter.Widget.__init__(self, master, widgetname, kw=kw)
  File "D:\Softwares\Python 3.6.0\lib\tkinter\__init__.py", line 2293, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: NULL main window

我不知道问题是什么。我试图找到答案 4 小时,基本上放弃了。

另外,我不想使用 tkinter 的消息框功能,因为我不想要感叹号图像,并且我想稍后在弹出窗口中包含多个复选框。

【问题讨论】:

  • a) 不要创建多个Tk 的实例,b) 请参阅effbot.org/tkinterbook/tkinter-dialog-windows.htm
  • command= 需要函数名称(回调) - 这意味着没有 ()。现在您执行 popupBonusWindow.destroy() 及其结果 - 可能是 None - 分配给 command=

标签: python-3.x tkinter popup popupwindow


【解决方案1】:

我发现了 3 个错误

  • 使用Toplevel() 而不是Tk() 创建第二/第三个窗口
  • command= 期望回调 - 没有 () 的函数名称
    (但你使用popupBonusWindow.destroy()
  • 不要在一个窗口或框架中混合pack()grid()
    (但您在弹出窗口中使用 grid()pack()

但您也可以使用内置消息框,例如 showinfo()

import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo

def popup_bonus():
    win = tk.Toplevel()
    win.wm_title("Window")

    l = tk.Label(win, text="Input")
    l.grid(row=0, column=0)

    b = ttk.Button(win, text="Okay", command=win.destroy)
    b.grid(row=1, column=0)

def popup_showinfo():
    showinfo("Window", "Hello World!")

class Application(ttk.Frame):

    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        self.pack()

        self.button_bonus = ttk.Button(self, text="Bonuses", command=popup_bonus)
        self.button_bonus.pack()

        self.button_showinfo = ttk.Button(self, text="Show Info", command=popup_showinfo)
        self.button_showinfo.pack()

root = tk.Tk()

app = Application(root)

root.mainloop()

顺便说一句:我把它放在页面上:Tkinter: How to create popup Window or Messagebox

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2014-05-26
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多