python跳转到程序顶部_python-如何使Tkinter窗口跳到最前面?
python-如何使Tkinter窗口跳到最前面?
如何获得Tkinter应用程序跳转到最前面? 当前,该窗口显示在我所有其他窗口的后面,并且没有获得焦点。
我应该打电话给一些方法吗?
nathan asked 2020-02-14T18:02:57Z
10个解决方案
64 votes
假设您说“我的其他窗口”是指您的应用程序窗口,则可以在顶级或Tk上使用root方法:
root.lift()
如果要使该窗口保持在所有其他窗口之上,请使用:
root.attributes("-topmost", True)
其中root是您的顶级或Tk。 不要忘记"topmost"前面的-!
要使其临时设置,请在紧随其后的最上方禁用:
def raise_above_all(window):
window.attributes('-topmost', 1)
window.attributes('-topmost', 0)
只需将要引发的窗口作为参数传递即可,这应该可行。
D K answered 2020-02-14T18:03:26Z
31 votes
如果在Mac上执行此操作,请使用AppleEvents将焦点集中在Python上。 例如:
import os
os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
username answered 2020-02-14T18:03:46Z
30 votes
在mainloop()之前添加以下行:
root.lift()
root.attributes('-topmost',True)
root.after_idle(root.attributes,'-topmost',False)
它非常适合我。 生成窗口时,它使窗口位于最前面,并且不会一直保持在最前面。
user6107173 answered 2020-02-14T18:04:10Z
5 votes
关于Mac,我注意到可能存在一个问题,即如果有多个python GUI运行,则每个进程都将被命名为“ Python”,而AppleScript倾向于将错误的进程推向前端。 这是我的解决方案。 这个想法是在加载Tkinter之前和之后获取正在运行的进程ID的列表。 (请注意,这些是AppleScript进程ID,似乎与posix的ID没有任何关系。请参见图。)然后,奇怪的人将是您的,然后将其移到最前面。 (我认为最后的循环不是必须的,但是如果您仅获得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''')
Ted C answered 2020-02-14T18:04:32Z
4 votes
在Mac OS X上,PyObjC提供了一种比osascript更干净,更不易出错的方法:
import os
from Cocoa import NSRunningApplication, NSApplicationActivateIgnoringOtherApps
app = NSRunningApplication.runningApplicationWithProcessIdentifier_(os.getpid())
app.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)
MagerValp answered 2020-02-14T18:04:52Z
4 votes
最近,我在Mac上也遇到了同样的问题。 我已经结合使用Mac的@MagerValp和其他系统的@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()
Tomasz Nguyen answered 2020-02-14T18:05:12Z
4 votes
它是多种其他方法的某种组合,可在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()
Caleb Hattingh answered 2020-02-14T18:05:36Z
0 votes
在macOS High Sierra py3.6.4上,这是我的解决方案:
def OnFocusIn(event):
if type(event.widget).__name__ == 'Tk':
event.widget.attributes('-topmost', False)
# Create and configure your root ...
root.attributes('-topmost', True)
root.focus_force()
root.bind('', OnFocusIn)
想法是将其带到最前端,直到用户与其交互,即集中精力。
我尝试了接受的答案.after_idle()和.after()。它们都在一种情况下失败:当我直接从PyCharm之类的IDE运行脚本时,应用程序窗口将停留在后面。
我的解决方案适用于遇到的所有情况。
kakyo answered 2020-02-14T18:06:10Z
-1 votes
关于在Tkinter._test()函数中调用mainloop()时如何使Tkinter窗口成为焦点的提示。
# The following three commands are needed so the window pops
# up on top on Windows...
root.iconify()
root.update()
root.deiconify()
root.mainloop()
这是我发现的最干净,最正确的方法,但仅Windows系统才需要。
user2683482 answered 2020-02-14T18:06:34Z
-1 votes
如果知道您想在其上移动目标窗口的窗口,则可以使用tkraise方法来简单地将aboveThis参数设置为您要绘制的窗口。
from tkinter import Tk, ttk, Toplevel
class App(Tk):
def __init__(self):
Tk.__init__(self)
self.title('Main Window')
self.state('zoomed')
self.l1 = ttk.Label(self, text='Hello World!')
self.l1.pack()
self.s = Splash()
self.s.tkraise(aboveThis=self)
class Splash(Toplevel):
def __init__(self):
Toplevel.__init__(self)
self.title('Splash Screen')
self.lift()
app = App()
app.mainloop()
Sourav B. Roy answered 2020-02-14T18:06:55Z
python跳转到程序顶部_python-如何使Tkinter窗口跳到最前面?相关推荐
- python tkinter画笑脸_python – 如何在tkinter窗口中绘制图像
如何在tkinter窗口中绘制图像(我使用的是 python 3.3)?我正在寻找一个可以在tkinter窗口的给定位置绘制图像的语句. 是啊- 任何答案将不胜感激.这里是我想要使用代码的程序的源代码 ...
- python运行不了程序代码_python怎么运行代码程序
展开全部 一.使用Python的解释器: 1.安装python一般都会有一个交互式32313133353236313431303231363533e78988e69d8331333433653964解 ...
- python能写桌面程序吗_python能写桌面程序吗
其实Python/Java/PHP都不适合用来做桌面开发,Java还是有几个比较成熟的产品的,比如大名鼎鼎的Java集成开发环境IntelliJ IDEA.Eclipse就是用Java开发的,不过PH ...
- python抽奖简单小程序游戏_python实现抽奖小程序
本文实例为大家分享了python实现抽奖小程序的具体代码,供大家参考,具体内容如下 设计一个抽奖服务 背景:有x个奖品,要求在y天内发完:每天至少发放z个奖品:每天抽奖人数不定,事先会假设一个范围是m ...
- python实现录音小程序 界面_python怎么对矩阵添加一列python实现录音小程序
本文为大家分享了python实现录音小程序的具体代码,供大家参考,具体内容如下 学习目标: 学习电脑网从python实现录音小程序分析来看,对python实现录音小程序的结果.掌握python的pya ...
- python可以用来编写计算机网络程序吗_python学习——网络程序设计
一.前言 Socket是计算机之间进行网络通信的一套程序接口,最初由Berkeley大学研发,目前已经成为网络编程的标准,可以实现跨平台的数据传输.Socket是网络通信的基础,相当于在发送端和接收端 ...
- python中tkinter模块窗口操作_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)...
本篇博文搬到个人博客:[洪卫の博客](https://sunhwee.com)上面去了,想要获得最佳阅读体验,欢迎前往 [https://sunhwee.com](洪卫の博客), 建议用电脑查看教程文 ...
- python showinfo 方法_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
Tkinter支持16个核心的窗口部件,这个16个核心窗口部件类简要描述如下: Button:一个简单的按钮,用来执行一个命令或别的操作. Canvas:组织图形.这个部件可以用来绘制图表和图,创建图 ...
- python做的简单gui计算器_Python计算器–使用Tkinter创建一个简单的GUI计算器
在Python计算器教程中,您将学习创建简单的GUI计算器.在这篇文章中,我将向您展示如何使用python中的tkinter模块开发一个简单的计算器.因此,让我们进一步创建一个简单的python计算器 ...
最新文章
- JavaScript for…in vs for
- strong与em、q、cite、blockquote区别
- 高德软件测试工资,【高德工资】软件测试工程师待遇-看准网
- InstantClient安装使用
- JS字符转为json对象
- 已创建仓库后 github提交流程
- 专利案件管理软件 唯德系统
- vilatile用法总结
- Android UI学习之Gallery
- dw中创建java程序_新建MainGame.java并创建窗口
- 【物体检测】基于matlab GUI形态学物体检测【含Matlab源码 945期】
- 佳能ir2002g无法扫描到计算机,佳能ir2002g扫描驱动官方版
- Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) C. Boredom(主席树)
- 大学英语精读第三版(第五册)复习笔记——文章内容摘要
- Python多线程抓取网页图片地址
- 【附源码】计算机毕业设计java在线答题系统设计与实现
- 负重前行,一步一脚印
- EmWin学习课堂_小白EmWin_EmWin快速入门_EmWin动态内存,显示和触摸屏_EmWin基础配置
- 2022N1叉车司机考试题模拟考试题库及模拟考试
- 2023.0329MySQL数据库
热门文章
- 新版SVT-AVS3发布 编码效率提升并提供更灵活的编码工具
- Telltale:看Netflix如何简化应用程序监控体系
- 【大会】5G现象级应用倒计时24个月
- ​SoundCloud的web播放库Maestro演进之路
- Serverless.com CEO首次访华!探讨无服务器技术落地
- 论亚马逊QLDB与腾讯TDSQL对历史数据的管理和计算
- Error: java.lang.RuntimeException: java.lang.NoSuchMethodException: com.henu.WC $WCMapper.init()
- 【ElasticSearch】使用Docker安装ElasticSearch、基本增删改查使用
- 【区块链】GO语言区块链项目——超级账本
- troubleshoot之:GC调优到底是什么