如何在Python中使用Tkinter在更改消息和更改按钮状态的情况下创建自定义消息框
问题内容:
我想确定一个消息窗口,在root window
此窗口的顶部与该链接类似。一个带有消息和一个无效按钮的消息窗口,直到代码的某些部分完成,然后显示带有一个激活按钮的消息。这就是代码结构的样子(我已经详细说明了一些细节,只是澄清了代码流的样子)
第二个窗口不起作用,而是该窗口出现在功能的末尾。有人可以帮忙吗?
from Tkinter import *
import tkMessageBox
def a():
return
def b():
. . .
. . .
msg_window = Toplevel()
msg_window.grapset()
msg_window.title( ___ )
msg_geometry( ___ )
msgLabel = Label(window)
msgLabel["text"]="Processing...."
msgLabel.pack()
btn = Button(msg_window, text="Ok", command=msg_window.destroy())
btn.pack()
btn.config(state=DISABLED)
a()
c()
d()
d()
msgLabel["text"]="Done"
msgLabel.pack()
btn = Button(msg_window, text="Ok", command=msg_window.destroy())
btn.pack()
btn.config(state=NORMAL)
e()
if tkMessageBox.askyesno( ___ ):
do something
else:
do something
pass
def c():
return
def d():
return
def e():
return
root = Tk()
frame = Frame( ___ )
frame.pack()
but_find = Button( ___ )
but_find.pack()
but_start = Button( ___ )
but_start.pack()
but_exit = Button( ___ )
but_exit.pack()
root.mainloop()
说明: 我正在构建一个应用程序,其中根窗口包含3个按钮。当start
单击按钮时,会function b
被调用,这又会调用其内部的各种其他功能function b
。这是我要创建第二个窗口的地方,该窗口显示在根窗口上方,并使根窗口处于非活动状态,直到function b
完成或被second window
破坏为止。
我想要的是.. 第二个窗口(包含2件事-一条消息和一个按钮)应function b
在某些步骤后开始。它应该显示该消息,Processing....
并在开始之前被inactive button
调用Ok
,function a
并且应该显示直到function d
完成。然后,我要显示Done
一个active 'Ok' button
会破坏第二个窗口的显示。然后root
激活窗口。
问题答案:
尝试开发自己的对话框。例:
import Tkinter as tk
class CustomDialog(tk.Toplevel):
def __init__(self, title, message, command1=self.ok, command2=self.ok, command3=self.ok, buttontext1="button1", buttontext2="button2", buttontext3="button3"):
self.base = tk.Toplevel()
self.base.title(title)
self.label = tk.Label(self.base, text=message)
self.label.pack()
self.label.grid(row=0, column=0, columnspan=3, sticky=N)
self.button1 = tk.Button(self.base, text=buttontext1, command=command1)
self.button1.pack()
self.button1.grid(row=1, column=0, sticky=N)
self.button2 = tk.Button(self.base, text=buttontext2, command=command2)
self.button2.pack()
self.button2.grid(row=1, column=1, sticky=N)
self.button3 = tk.Button(self.base, text=buttontext3, command=command3)
self.button3.pack()
self.button3.grid(row=1, column=2, sticky=N)
def ok(self, event=None):
self.destroy()
def baseconfig(self, option, value):
self.base[option] = value
def labelconfig(self, option, value):
self.label[option] = value
def buttonconfig(self, number, option, value):
exec "self.button%s[option] = value" % str(number)
def customDialog(title, message, command1=self.ok, command2=self.ok, command3=self.ok, buttontext1="button1", buttontext2="button2", buttontext3="button3", button1ret=None, button2ret=None, button3ret=None):
def _button1press():
command1()
return button1ret
def _button2press():
command2()
return button2ret
def _button3press():
command3()
return button3ret
dialog = CustomDialog(title, message, _button1press, _button2press, _button3press, buttontext1, buttontext2, buttontext3)
要禁用第一个按钮,请调用self.buttonconfig(1, state, DISABLED)
(1表示按钮的编号)。要启用它,请使用self.buttonconfig(1, state, NORMAL)
。