【问题标题】:Python tkinter window loses focus when an info alert is displayed显示信息警报时,Python tkinter 窗口失去焦点
【发布时间】:2015-03-13 20:22:29
【问题描述】:

我正在 tkinter (python) 中构建一个基本的登录系统,当用户输入他们的详细信息进行注册时,我想显示一个 tkmessagebox,它会告诉他们输入是否有任何错误。

最初加载 GUI 时,系统会询问他们是否要登录或注册(工作正常)。假设用户单击注册,他们将被带到第二个屏幕以输入他们的详细信息(也可以正常工作)。从这里开始,当他们输入他们的详细信息并单击注册时,如果显示错误警报,则 GUI 的注册部分失去焦点并消失在 GUI 的第一部分后面,用户将选择进入注册屏幕。

有什么方法可以防止我的子窗口在显示警报时失去焦点?

def registerCheck(self):

    #print('Username: '+ str(self.UN.get()))
    errorList = ''
    if self.UN.get() == '':
        errorList += 'Username cannot be empty\n'
    if len(self.PW.get()) < 4:
        errorList += 'Password must be more than 4 characters long\n'
    if self.PW.get() != self.PWCF.get():
        errorList += 'Passwords do not match\n'
    if len(self.Email.get()) < 5:
        errorList += 'Email is not valid\n'

    if errorList == '':
        tkMessageBox.showinfo(title="About", message="No Errors Found")
    else:
        tkMessageBox.showerror(title="Errors Found!", message=errorList)


    return

【问题讨论】:

标签: python python-2.7 user-interface tkinter


【解决方案1】:

使消息框成为第二个窗口的子窗口,而不是根窗口的隐式子窗口。您可以通过在创建消息框时设置parent 属性来做到这一点。

例如:

new_window = Toplevel()
...
tkMessageBox.showinfo(parent=new_window, title="About", message="...")

【讨论】:

  • 你能举例说明如何做到这一点吗?
  • @StevenVascellaro:消息框方法有一个parent 属性。将其设置为 root 以外的某个窗口。
  • 我已经制作了更多 minimal example 来展示我的问题。 (当前问题的代码示例有点差)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多