gpt4 book ai didi

python - 使 Tkinter 窗口成为非 Tkinter 窗口的子窗口

转载 作者:行者123 更新时间:2023-12-03 04:16:38 26 4
gpt4 key购买 nike

(这个问题是 originally posted 到 python-tkinter 邮件列表)

TL;TR 如何在 Windows 上从 HWND 设置 Tkinter 窗口的主控?

我在 Windows 上的嵌入式 Python 解释器中使用 Tkinter。
有一个打开了主窗口的桌面 Win32 应用程序。
嵌入式 Python 运行一个脚本,该脚本创建并显示一个 Tkinter 窗口。

有没有办法根据 HWND 分配 Tkinter 窗口的主(父)? Win32 窗口?

我想让 Tkinter 窗口相对于主 Win32 应用程序窗口成为一个完全模式的窗口。

我知道winfo_*带有 winfo_id() 的 API这允许我查询 Win32 HWND Tkinter 窗口,但似乎没有类似的功能可以通过 HWND 设置父级(或非 Windows 操作系统上的 id)。

我有一个粗略的想法是创建一个小的 Python 扩展,可以从我的嵌入式 Python 中获得,并暴露自定义函数来覆盖 HWND Tkinter windows 的父级,使用 Win32 SetParent .

这是该想法的某种伪代码:

PyObject * mywin32_set_parent(PyObject *self, PyObject *args)
{

/* unpack Tkinter HWND from args */
HWND hTkinterWindow = ... ;

/* returns main application window */
HWND hAppWindow = GetMyAppWindow();

/* make the main window parent of the Tkinter */
::SetParent(hTkinterWindow, hAppWindow)

Py_INCREF(Py_None);
return Py_None;
}

然后在嵌入式 Python 执行的 Python 脚本代码中:
import mywin32
root = Tk()
hwnd = root.winfo_id()
# make root a child of the main application window overwriting its parent
mywin32.set_parent(hwnd)

为简化起见,我们假设从 HWND 设置 master 的唯一目的是是将 Tkinter 窗口相对于(或在顶部) HWND 的窗口定位。被分配为主。
IOW,Tkniter 窗口的行为类似于非 Tkinter 窗口的模态对话框。

是否有任何 Tkinter 惯用的方式来实现这种行为?

最佳答案

尝试使用按钮:

from tkinter import *
def Test():
Test = Toplevel()
main = Tk()
main.title("<Your title>")
main.geometry("400x400")
Button(main, text="<Your text>", command=Test).grid(row=0, column=0, sticky=W)
main.mainloop()

这就是我们得到的:
See the picture

关于python - 使 Tkinter 窗口成为非 Tkinter 窗口的子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19358107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com