回答
假設你的意思是你的應用程序窗口,當你說「我的其他窗口」,您可以使用lift()
方法上的Toplevel或tK:
root.lift()
如果你想在窗口停留於其他窗口之上,使用:
root.attributes("-topmost", True)
其中root
是你的Toplevel或Tk。不要忘記"topmost"
以前的-
!
爲了讓臨時,禁用權最頂端後:
def raise_above_all(window):
window.attributes('-topmost', 1)
window.attributes('-topmost', 0)
你想提高作爲一個參數的窗口就通了,這應該工作。
如果您在Mac上執行此操作,請使用AppleEvents將焦點集中到Python。例如:
import os
os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
關於在Mac,我發現可以有這樣的問題:如果有運行多個python的圖形用戶界面,每個進程將被命名爲「巨蟒」和AppleScript往往會推動錯誤的一個前。這是我的解決方案。這個想法是在加載Tkinter之前和之後獲取正在運行的進程ID列表。 (請注意,這些AppleScript進程ID似乎與它們的posix無關,請參閱圖)。然後,奇怪的人將成爲你的,並將其移到最前面。 (我不認爲最後的循環是必要的,但是如果你簡單地得到每個進程的ID爲procID,AppleScript顯然會返回一個由名稱標識的對象,這當然是非唯一的「Python」,所以我們又回到了原點,除非有什麼我失蹤)
import Tkinter, subprocess
def applescript(script):
return subprocess.check_output(['/usr/bin/osascript', '-e', script])
def procidset():
return set(applescript(
'tell app "System Events" to return id of every process whose name is "Python"'
).replace(',','').split())
idset = procidset()
root = Tkinter.Tk()
procid = iter(procidset() - idset).next()
applescript('''
tell app "System Events"
repeat with proc in every process whose name is "Python"
if id of proc is ''' + procid + ''' then
set frontmost of proc to true
exit repeat
end if
end repeat
end tell''')
在Mac OS X PyObjC提供了一個更清潔,不易出錯的方法比脫殼而出,以osascript:
import os
from Cocoa import NSRunningApplication, NSApplicationActivateIgnoringOtherApps
app = NSRunningApplication.runningApplicationWithProcessIdentifier_(os.getpid())
app.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)
近日,我在Mac上也有同樣的問題。我已經聯合使用@MagerValp
爲Mac和@D K
其他系統的幾個答案:
import platform
if platform.system() != 'Darwin':
root.lift()
root.call('wm', 'attributes', '.', '-topmost', True)
root.after_idle(root.call, 'wm', 'attributes', '.', '-topmost', False)
else:
import os
from Cocoa import NSRunningApplication, NSApplicationActivateIgnoringOtherApps
app = NSRunningApplication.runningApplicationWithProcessIdentifier_(os.getpid())
app.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)
root.mainloop()
這是什麼編程語言 – zavr 2017-01-31 20:27:18
語言是Python – 2017-01-31 23:06:37
與其他分支(其中沒有Cocoa模塊)不同,在Sierra上添加和刪除'-topmost'。我正在運行OS X默認tk。 – 2017-04-04 17:55:23
主循環()之前添加以下行:
root.lift()
root.attributes('-topmost',True)
root.after_idle(root.attributes,'-topmost',False)
它可以完美的我。當窗口生成時,它使窗口到達前端,並且它不會始終保持在前端。
我正在運行10.11這是唯一對我有用的答案。 – user1247 2016-09-02 03:17:12
這種方法結合了各種其他方法,它適用於OS X 10.11和運行在venv中的Python 3.5.1,並且也可以在其他平臺上運行。它還通過進程ID而不是應用程序名稱來定位應用程序。
from tkinter import Tk
import os
import subprocess
import platform
def raise_app(root: Tk):
root.attributes("-topmost", True)
if platform.system() == 'Darwin':
tmpl = 'tell application "System Events" to set frontmost of every process whose unix id is {} to true'
script = tmpl.format(os.getpid())
output = subprocess.check_call(['/usr/bin/osascript', '-e', script])
root.after(0, lambda: root.attributes("-topmost", False))
您的mainloop()
調用之前正確調用它,就像這樣:
raise_app(root)
root.mainloop()
有一個關於如何使Tkinter的窗口獲得焦點,當你調用在Tkinter._test主循環()的提示( )功能。
# The following three commands are needed so the window pops
# up on top on Windows...
root.iconify()
root.update()
root.deiconify()
root.mainloop()
這是我找到的最乾淨最正確的方式,但它只是Windows系統需要的。
- 1. 如何讓PyQT4窗口跳到前面?
- 2. 如何關閉Tkinter窗口
- 3. 如何使tkinter窗口在i3窗口管理器中浮動
- 4. 如何使用AutoIt3將過程窗口帶到前面?
- 5. 如何使用Excel VBA將ActiveWorkbook放到窗口的前面?
- 6. 如何使firefox webdriver瀏覽器窗口到桌面的前端
- 7. 將窗口部件放到窗口上(使用tkinter)
- 8. 如何將WPF窗口放在前面?
- 9. 在主窗口前瞬間彈出Python Tkinter小窗口
- 10. 讓Tkinter的窗口並不總在最前面
- 11. 如何使用Tkinter設置背景圖像到窗口python 2.7
- 12. 桌面之外的Tkinter窗口
- 13. Python:如何關閉以前的主要(頂部)tkinter窗口
- 14. 在applescript前面的窗口前面
- 15. 父窗口點擊時,如何在父窗口前面添加父窗口
- 16. Tkinter窗口破壞
- 17. Tkinter窗口分層
- 18. Tkinter窗口操作
- 19. 窗口中的Tkinter
- 20. 使用Tkinter iwant打開第二個窗口,然後關閉前一個窗口
- 21. WPF - 將窗口帶到前面
- 22. 力量把excel窗口帶到前面?
- 23. WPF將窗口移到前面
- 24. 將JFrame窗口帶到前面
- 25. PyGObject和glade發送窗口到前面
- 26. 用Cocoa將子窗口帶到前面
- 27. 將歌劇窗口帶到前面!
- 28. 如何父程序tkinter窗口
- 29. 如何在Python中「刷新」Tkinter窗口?
- 30. 如何銷燬這個tkinter窗口
試過在mac 10.9上的.lift()沒有工作。 – shawn 2013-12-30 16:48:14
我的意思是: windows.attributes(1)的確帶到了前面,但(0)似乎沒有禁用它。它實際上發送到後面。 – shawn 2013-12-30 16:57:13
在Windows 7中工作 – Aftershock 2014-03-22 19:39:03