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窗口跳到最前面?相关推荐

  1. python tkinter画笑脸_python – 如何在tkinter窗口中绘制图像

    如何在tkinter窗口中绘制图像(我使用的是 python 3.3)?我正在寻找一个可以在tkinter窗口的给定位置绘制图像的语句. 是啊- 任何答案将不胜感激.这里是我想要使用代码的程序的源代码 ...

  2. python运行不了程序代码_python怎么运行代码程序

    展开全部 一.使用Python的解释器: 1.安装python一般都会有一个交互式32313133353236313431303231363533e78988e69d8331333433653964解 ...

  3. python能写桌面程序吗_python能写桌面程序吗

    其实Python/Java/PHP都不适合用来做桌面开发,Java还是有几个比较成熟的产品的,比如大名鼎鼎的Java集成开发环境IntelliJ IDEA.Eclipse就是用Java开发的,不过PH ...

  4. python抽奖简单小程序游戏_python实现抽奖小程序

    本文实例为大家分享了python实现抽奖小程序的具体代码,供大家参考,具体内容如下 设计一个抽奖服务 背景:有x个奖品,要求在y天内发完:每天至少发放z个奖品:每天抽奖人数不定,事先会假设一个范围是m ...

  5. python实现录音小程序 界面_python怎么对矩阵添加一列python实现录音小程序

    本文为大家分享了python实现录音小程序的具体代码,供大家参考,具体内容如下 学习目标: 学习电脑网从python实现录音小程序分析来看,对python实现录音小程序的结果.掌握python的pya ...

  6. python可以用来编写计算机网络程序吗_python学习——网络程序设计

    一.前言 Socket是计算机之间进行网络通信的一套程序接口,最初由Berkeley大学研发,目前已经成为网络编程的标准,可以实现跨平台的数据传输.Socket是网络通信的基础,相当于在发送端和接收端 ...

  7. python中tkinter模块窗口操作_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)...

    本篇博文搬到个人博客:[洪卫の博客](https://sunhwee.com)上面去了,想要获得最佳阅读体验,欢迎前往 [https://sunhwee.com](洪卫の博客), 建议用电脑查看教程文 ...

  8. python showinfo 方法_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)

    Tkinter支持16个核心的窗口部件,这个16个核心窗口部件类简要描述如下: Button:一个简单的按钮,用来执行一个命令或别的操作. Canvas:组织图形.这个部件可以用来绘制图表和图,创建图 ...

  9. python做的简单gui计算器_Python计算器–使用Tkinter创建一个简单的GUI计算器

    在Python计算器教程中,您将学习创建简单的GUI计算器.在这篇文章中,我将向您展示如何使用python中的tkinter模块开发一个简单的计算器.因此,让我们进一步创建一个简单的python计算器 ...

最新文章

  1. JavaScript for…in vs for
  2. strong与em、q、cite、blockquote区别
  3. 高德软件测试工资,【高德工资】软件测试工程师待遇-看准网
  4. InstantClient安装使用
  5. JS字符转为json对象
  6. 已创建仓库后 github提交流程
  7. 专利案件管理软件 唯德系统
  8. vilatile用法总结
  9. Android UI学习之Gallery
  10. dw中创建java程序_新建MainGame.java并创建窗口
  11. 【物体检测】基于matlab GUI形态学物体检测【含Matlab源码 945期】
  12. 佳能ir2002g无法扫描到计算机,佳能ir2002g扫描驱动官方版
  13. Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) C. Boredom(主席树)
  14. 大学英语精读第三版(第五册)复习笔记——文章内容摘要
  15. Python多线程抓取网页图片地址
  16. 【附源码】计算机毕业设计java在线答题系统设计与实现
  17. 负重前行,一步一脚印
  18. EmWin学习课堂_小白EmWin_EmWin快速入门_EmWin动态内存,显示和触摸屏_EmWin基础配置
  19. 2022N1叉车司机考试题模拟考试题库及模拟考试
  20. 2023.0329MySQL数据库

热门文章

  1. 新版SVT-AVS3发布 编码效率提升并提供更灵活的编码工具
  2. Telltale:看Netflix如何简化应用程序监控体系
  3. 【大会】5G现象级应用倒计时24个月
  4. ​SoundCloud的web播放库Maestro演进之路
  5. Serverless.com CEO首次访华!探讨无服务器技术落地
  6. 论亚马逊QLDB与腾讯TDSQL对历史数据的管理和计算
  7. Error: java.lang.RuntimeException: java.lang.NoSuchMethodException: com.henu.WC $WCMapper.init()
  8. 【ElasticSearch】使用Docker安装ElasticSearch、基本增删改查使用
  9. 【区块链】GO语言区块链项目——超级账本
  10. troubleshoot之:GC调优到底是什么