当前位置:   article > 正文

tkinter创建真正的嵌套子窗口_tkinter子窗口

tkinter子窗口

引言

在我之前的这篇纯tkinter创建嵌套子窗口的文章中,只提及了3种方法,原因就是,那三种方法都是建立在相对高层的代码上的。而这次需要使用系统(Windows)的底层api,来创建真正意义上的嵌套子窗口。

需要注意的是,这次的子窗口是完全真正的窗口,也就是tkinter的子窗口功能全开。不过,这篇文章并不是由纯tkinter实现。

我们没必要去寻找 Windows-api,已经有人帮我们弄好了,这次需要用到 win32gui (下载 pywin32 就可以了)。除了单独下载 pywin32,在测试阶段还需要使用 pygetwindow,用 pip install PyGetWindow 就可以了。

获取窗口句柄

方法一

win32gui已经给出了方法,如下:

import win32gui
import pygetwindow as gw

hwnd = win32gui.FindWindow(None, u"窗口名称")
  • 1
  • 2
  • 3
  • 4

然而在测试就阶段,有些窗口的标题很难准确确定,那么就要使用 pygetwindow 了。

titles = gw.getAllTitles()
print(titles)
  • 1
  • 2

方法二

同样的,pygetwindow 也提供了通过标题一个获取窗口句柄的方式。

import re
pidinfo=gw.getWindowsWithTitle("窗口标题")[0]
print(pidinfo)
pid=re.findall('hWnd=(\d+)',str(pidinfo))[0]#之后要用 int() 从字符串转为整数
  • 1
  • 2
  • 3
  • 4

tkinter窗口用这两种可能会不准或出错。
窗口显示前,使用 tkinter窗口以及组件自带的 winfo_id()。
窗口显示后,使用以上两种方法

创造嵌入窗口

在这里不得不感叹 win32gui 的强大,使用 SetParent 函数就可以做到。

#pid: 父窗口句柄
#cid: 子窗口句柄

win32gui.SetParent(cid,pid)
  • 1
  • 2
  • 3
  • 4

在窗口创建后再嵌套,子窗口显示速度可能会有点慢,而且不知道边框为什么是 Windows7(Visita)的样式

一行代码直接搞定,太感人了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/124931
推荐阅读
相关标签