python tkinter 窗口最前_python – 确定当前最重要的tkinter窗口

我在python 2.7和tkinter中编写了一个应用程序.我创建了一个带有几个按钮的工具栏,这些按钮打开了各自显示各种选项的顶部窗口.我使用ttk.Checkbutton以’toolbutton’样式作为指示器来显示选项窗口是打开还是关闭.

问题是如果选择了另一个窗口,选项窗口将返回到后面.目前,如果再次选择工具按钮,则选项窗口将关闭.但是,如果窗口位于顶部,我只想关闭窗口.如果选项窗口不在顶部,我希望窗口移到前面.

我工作的一些代码:

class MainWindow:

def __init__(self,application):

self.mainframe=tk.Frame(application)

application.geometry("900x600+30+30")

self.otherOptionsSelect=tk.IntVar()

self.otherOptions_Button=ttk.Checkbutton(application,style='Toolbutton',variable=self.otherOptionsSelect,

onvalue=1, offvalue=0,image=self.optionsIcon, command=self.otherOptions)

def otherOptions(self):

if self.otherOptionsSelect.get()==0:

self.otherOptions.destroy()

return

self.otherOptions=tk.Toplevel()

self.otherOptions.title("IsoSurface Options")

self.otherOptions.geometry("200x165+"+str(int(application.winfo_x())+555)+"+"+str(int(application.winfo_y())+230))

self.otherOptApply_button=ttk.Button(self.otherOptions,text="Apply",command=self.showFrame)

self.otherOptApply_button.place(x=20,y=80,width=50,height=30)

self.otherOptClose_button=ttk.Button(self.otherOptions,text="Close",command=self.otherOptionsClose)

self.otherOptClose_button.place(x=80,y=80,width=50,height=30)

def otherOptionsClose(self):

self.otherOptionsSelect.set(0)

self.otherOptions.destroy()

这是我写的整个应用程序的图片:

在上图中,每个窗口都有各自的ttk.checkbutton.此时,切换按钮会打开或关闭窗口.但是,如果窗口位于应用程序前面,我真正希望它关闭窗口,或者如果窗口位于应用程序后面,则将窗口置于前面.

希望这能解决一些问题.

提前致谢!

解决方法:

实际上可以检查窗口的堆叠顺序.使用Tkinter,你必须做一些有趣的tcl evals来获取信息.我在Windows and Dialogs的部分找到了TkDoc的答案,向下滚动直到你进入“堆叠顺序”.代码让我感到困惑,直到我开始以交互方式玩它.我的测试代码是:

import Tkinter as tk

root = tk.Tk()

root.title('root')

one = tk.Toplevel(root)

one.title('one')

two = tk.Toplevel(root)

two.title('two')

然后我操纵窗户,使两个在顶部,一个在它下面,根部在它们下面.在该配置中,以下奇怪可以告诉您相对分层的窗口:

root.tk.eval('wm stackorder '+str(two)+' isabove '+str(root))

返回1,表示“是,窗口2位于窗口根目录之上”.以下内容:

root.tk.eval('wm stackorder '+str(root)+' isabove '+str(two))

返回0,表示“否,窗口根不在窗口2之上”.您还可以使用以下命令:

root.tk.eval('wm stackorder '+str(root))

这给出了一个奇怪的字符串形式的完整窗口堆栈顺序,如下所示:

'. .68400520L .68401032L'

在运行命令时,这开始有意义:

str(root)

str(one)

str(two)

并确定root的内部名称为’.’,一个是’.68400520L’,两个是’.68401032L’.你向后读取root.tk.eval(‘wm stackorder’str(root))的输出,所以它说两个在顶部,一个在那之下,root在两个之下.

标签:python,tkinter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值