首页 > Windows开发 > 详细

pywin32获得tkinter的Canvas窗口句柄,并在上面绘图

时间:2019-09-10 21:12:31      阅读:161      评论:0      收藏:0      [点我收藏+]

上一篇博文获得主窗口句柄使用的是root.frame或者通过子控件调用master.frame方法,但是子控件本身没有frame方法。那么怎么获得子控件的句柄呢?试过了很多办法,想过把Canvas当作tkinter子窗口,最后效果都不理想,最后无意看到有人用winfo_id()方法获得主窗口的句柄,而尝试去获得子窗口的句柄也可以。

所以把上一篇博文的代码修改了一下,实现使用win32在tkinter的canvas画布上画画

from win32gui import *
import win32con
import pywintypes
from tkinter import *

root=Tk()

cv=Canvas(root,bg="white")
cv.pack(fill=BOTH,expand=1)

hwnd = cv.winfo_id()
hdc=GetDC(hwnd)
hbrush=GetStockObject(win32con.NULL_BRUSH)
oldbrush=SelectObject(hdc,hbrush)

cv.update()
Rectangle(hdc,50,50,100,100)

def callback(event):
    cv.update()
    Rectangle(hdc,50,50,100,100)


cv.bind("<Configure>",callback)

root.geometry("400x400")
#root.mainloop()
cv.mainloop()

技术分享图片

当然这个程序是测试性质的,没有绑定窗口销毁消息释放环境设备等。另外还有一个要注意的是,<Configure>类似于窗口重绘,但是在这个程序里,虽然为canvas绑定了<Configure>事件,但是拖动改变窗口的大小,是改变了主窗口root的大小,所以这里把canvas设置为填充整个主窗口

---------------------

用pywin32获得tkinter窗口句柄,实现在上面绘图,其目的是,我试图找到一种利用python学习opengl的方法。我手里的几个opengl教程都是基于windows窗口的c/c++程序。那么我或许可以试着使用win32函数和一般的python函数,在tkinter窗口上使用opengl库。

 

pywin32获得tkinter的Canvas窗口句柄,并在上面绘图

原文:https://www.cnblogs.com/vocus/p/11502550.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!