【问题标题】:tkinter give window focustkinter 给窗口焦点
【发布时间】:2013-02-28 17:46:21
【问题描述】:

我有一个 tkinter python 2.x 程序。我有几个窗口出现在屏幕上。我使用按钮从一个导航到另一个,但我正在努力关闭一个窗口并重新关注当前打开的窗口。我可以打开新窗口就好了!

#code for main window
def frmMain():
  app = Tk()
  app.title("TWS: XML Options")
  app.geometry("200x100")
  bn1 = Button(app,text="Add", command=frmAdd)
  bn1.grid(row = 2,column = 2, stick = W)
  bn2 = Button(app,text="Edit", command=frmEdit)
  bn2.grid(row = 2,column = 3, stick = W)
  bn3 = Button(app,text="Delete", command=frmDelete)
  bn3.grid(row = 2,column = 4, stick = W)
  bn4 = Button(app,text="Back",command=frmMenu)
  bn4.grid(row = 3,column = 2, stick = W)
  app.mainloop()

#code for button on sub window
....
bn1 = Button(app,text="Back", command=back)
...

def back():
   #Code to close current window and reopen frmMain

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    只需在小部件的父级上调用 destroy()。

    bn1 = Button(app, text="Back", command=app.destroy)
    

    我假设你没有销毁父窗口,所以一旦Toplevel被销毁,焦点会自动返回到之前打开的窗口。

    【讨论】:

    • 如果说有 5 个窗口打开,并且您有一个将它们链接在一起的表单,您如何将焦点落在特定窗口上,而不是最后一个打开的窗口?跨度>
    • 那你需要一个具体窗口的引用,然后在销毁当前窗口之前调用mywindow.focus_set()。
    • 如何在上面的代码中获得对 frmMain 的引用?类似 myWindow = get.title("TWS: XML Options")
    【解决方案2】:

    TopLevel Window 可以使用其deiconify() 方法激活。

    使用基本的Widget 方法focus_set() 将键盘焦点设置到特定的小部件。

    【讨论】:

    • 在 OSX 上对我不起作用。我也试过focus_force(),也没有用。我可能会求助于特定于平台的解决方案来使这项工作在 OSX 上运行。
    猜你喜欢
    • 2014-05-10
    • 2018-03-15
    • 1970-01-01
    • 2012-12-01
    • 2012-02-12
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多