【发布时间】: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