上一篇博文获得主窗口句柄使用的是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库。

最新文章

  1. 继承映射关系 TPH、TPT、TPC&lt;EntityFramework6.0&gt;
  2. 2015.2.16 关于delphi web控件打开新网页时弹出关闭页面(js代码)出错的解决办法研究
  3. 常用的Mysql数据库操作语句大全
  4. psql-06表:约束
  5. [翻译]MapReduce: Simplified Data Processing on Large Clusters
  6. swift入门-day01-基本语法
  7. Android的消息处理机制(Looper,Handler,Message)(转)
  8. Apache Spark 2.2.0 中文文档 - SparkR (R on Spark) | ApacheCN
  9. Javascripte的原型链之基础讲解
  10. Java HashMap 使用了未经检查或不安全的操作
  11. 安卓获取签名SHA1
  12. 安装VS时,双击setup.exe后界面一闪而过的问题
  13. mysql插入中文报错的问题
  14. react学习笔记1一基础知识
  15. IIS 设置文件传输大小限制
  16. java.io.Closeable 接口
  17. Linux 目录说解
  18. python3 的 round 函数的 练习
  19. webdriver模拟鼠标悬浮
  20. 解决“ 故障模块名称: clr.dll ”

热门文章

  1. face_recognition人脸识别
  2. pythonfile的知识点
  3. pixi的图片处理
  4. 一百一十五、脱离SAP本体,通过ActiveX读取SAP表中数据
  5. 与Power BI一起使用Cortana
  6. Android Studio模拟器无法访问网络
  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-indent-right
  8. js模式-观察者模式
  9. 【剑指Offer】面试题22. 链表中倒数第k个节点
  10. python 将数组中取某一值的元素全部替换为其他元素的方法