3

打开新的 tkinter 窗口时,我只希望用户能够单击新窗口上的按钮。他们不应该能够从属于应用程序的其他窗口单击按钮。我将如何做到这一点?

这是我的代码片段:

def exportEFS(self):
  self.exportGUI = Toplevel()
  Button(self.exportGUI, text='Backup', command=self.backup).pack(padx=100,pady=5)
  Button(self.exportGUI, text='Restore', command=self.restore).pack(padx=100,pady=5)

def backup(self):
  self.backupWindow = Toplevel()

  message = "Enter a name for your Backup."

  Label(self.backupWindow, text=message).pack()

  self.entry = Entry(self.backupWindow,text="enter your choice")
  self.entry.pack(side=TOP,padx=10,pady=12)

  self.button = Button(self.backupWindow, text="Backup",command=self.backupCallBack)
  self.button.pack(side=BOTTOM,padx=10,pady=10)

在此片段中,一旦打开了 backupWindow,exportGUI 仍保持打开状态,但在打开 backupWindow 时用户不应单击“备份”或“恢复”。

谢谢!

4

2 回答 2

4

您将需要在 TopLevel 窗口上调用 grab_set,以便将所有键盘和鼠标事件发送到该窗口。

def exportEFS(self):
  self.exportGUI = Toplevel()
  Button(self.exportGUI, text='Backup', command=self.backup).pack(padx=100,pady=5)
  Button(self.exportGUI, text='Restore', command=self.restore).pack(padx=100,pady=5)

def backup(self):
  self.backupWindow = Toplevel()
  self.backupWindow.grab_set()

  message = "Enter a name for your Backup."

  Label(self.backupWindow, text=message).pack()

  self.entry = Entry(self.backupWindow,text="enter your choice")
  self.entry.pack(side=TOP,padx=10,pady=12)

  self.button = Button(self.backupWindow, text="Backup",command=self.backupCallBack)
  self.button.pack(side=BOTTOM,padx=10,pady=10)
于 2012-06-20T15:49:04.380 回答
2

您可以做的是将状态设置为禁用。如此:

self.button.config(state="disabled")

要启用它,您只需使用:

self.button.config(state="normal")

但是,您必须先将按钮分配给变量,如下所示:

self.backup=Button(self.exportGUI, text='Backup', command=self.backup)
self.backup.pack(padx=100,pady=5)
self.restore=Button(self.exportGUI, text='Restore', command=self.restore)
self.restore.pack(padx=100,pady=5)

所以你可以使用以下方法禁用这些:

self.backup.config(state="disabled")
self.restore.config(state="disabled")

并重新启用:

self.backup.config(state="normal")
self.restore.config(state="normal")

但是请注意,当按钮被禁用时,无论是通过代码还是通过使用它的用户,都无法对该按钮进行任何更改。所以这意味着如果您想更改该按钮的文本,则必须在更改"normal"之前将按钮的状态更改为(如果它已经不处于该状态,默认情况下,所有小部件在首次创建)。

干杯:)

于 2012-06-20T15:50:05.573 回答