2013-04-18 80 views
2

我試圖做一個Toplevel的構件,在屏幕上(我希望如此,如果你按輸入上的活動窗口,它退出窗口。我已經有鑰匙綁定窗口小部件,但我似乎無法讓窗口成爲​​我電腦上的主窗口,我正在使用Notepad ++運行我的程序(我有一個用於此特定程序的快捷方式,因爲我將使用它很多)做一個Tkinter的Toplevel的積極

這裏是我的代碼:

def main(): 
    root = Tk(className = ' Module Opener') 
    app = GetFileName(root) 
    root.rowconfigure(0, weight = 1) 
    root.columnconfigure(0, weight = 1) 
    root.bind('<Return>', (lambda e, b=app.goButton: b.invoke())) 
    root.mainloop() 
    f, pythonType = app.fileName, app.pythonType 
    if f[-3:] != '.py': f += '.py' 
    moduleFile = getFilePath(f, pythonType) 
    if not moduleFile is None: 
     subprocess.call([r"C:\Program Files\Notepad++\notepad++.exe", moduleFile]) 
    else: 
     root.withdraw() 
     finalRoot = Toplevel(root) 
     finalRoot.grab_set() # I thought this would make it active 
     finalApp = FileNotExist(finalRoot, f) 
     finalRoot.rowconfigure(0, weight = 1) 
     finalRoot.columnconfigure(0, weight = 1) 
     finalRoot.bind('<Return>', (lambda e, b=finalApp.okButton: b.invoke())) 
     finalRoot.mainloop() 

我想它,以便它打開時,如果我按輸入,它執行我的命令;不過,我必須先點擊窗口才能激活,然後才能正常工作。

我試着如finalRoot.lift()finalRoot.focus_set()finalRoot.grab_set()/finalRoot.grab_set_global()(我看到another question這些方法)不同的東西,finalRoot.focus()

第一個窗口Tk()在程序啓動時處於活動狀態。但是,Toplevel()不是。我也嘗試製作兩個Tk()(摧毀root,然後創建finalRoot作爲新的Tk()實例),但這種方式並不奏效。我怎樣才能做到這一點?謝謝!

回答

1

我有同樣的問題,並嘗試了一切,我可以找到。 不幸的是,答案是它取決於你的操作系統。我的窗口自動聚焦在我的舊Mac上,但不在OSX Lion上。您列出的一些命令也取決於操作系統。

+0

我的操作系統是Windows 7(專業)。我認爲會有一種方法,但不要猜測... –

0
root.call('wm', 'attributes', '.', '-topmost', True) 
root.after_idle(root.call, 'wm', 'attributes', '.', '-topmost', False) 
root.focus_force() 
+0

我也測試過這個,但它不起作用(OSX 10.9.2)。我現在最好的 - 但不適用於每個人 - 是''self.root.wm_attributes(「 - topmost」,1)'' – JulienD

+0

@muraveill可能依賴於平臺,我的操作系統是Ubuntu 12.04。 – metaphy

3

......不過,我已經使其成爲活躍在窗口中單擊第一,然後它的作品。

我剛剛遇到了這個問題,而我在研究解決方案時,發現了這個線程。我正在使用Windows 7專業版。我所做的只是呼叫grab_set()focus()它解決了我的問題。你已經有finalRoot.grab_set(),只需添加:

finalRoot.focus() 

它的工作在我的情況。

1

我試過上面的解決方案,發現focus_force()獨自在Windows Vista/Python 3.3上工作。在創建Toplevel窗口時,也可能包含takefocus=True方法。

0

沒有以上建議爲我工作在Mac OS埃爾卡皮坦,但這:

class Window(Tk.Toplevel): 
    ... 
    def setActive(self): 
     self.lift() 
     self.focus_force() 
     self.grab_set() 
     self.grab_release() 
    ...