上一篇博文获得主窗口句柄使用的是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窗口句柄,并在上面绘图的更多相关文章

  1. Tkinter画布-Canvas

    Python - Tkinter画布-Canvas: Canvas是一个长方形的面积,图画或其他复杂的布局.可以放置在画布上的图形,文字,部件,或是帧 Canvas是一个长方形的面积,图画或其他复杂的 ...

  2. tkinter之canvas(画布)

    画布的例子: from tkinter import * root=Tk() root.title('简易绘图') can=Canvas(root,width=400,height=300,bg='# ...

  3. pywin32获得tkinter窗口句柄,并在上面绘图

    想实现用win32 API在tkinter窗口上画图,那么应该先获得tkinter窗口的句柄hwnd,然后再获得tkinter的设备hdc.尝试了FindWindow(),GetActiveWindo ...

  4. Python3 tkinter基础 Canvas delete 删除画布中的所有图形

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  5. Python3 tkinter基础 Canvas create_text 在画布上添加文字

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  6. Python3 tkinter基础 Canvas create_rectangle 画虚边的矩形 create_oval 画椭圆形 圆形

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  7. Python3 tkinter基础 Canvas create_rectangle 画矩形

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  8. Python3 tkinter基础 Canvas create_line 画实线与虚线

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  9. Python3 tkinter基础 Canvas create_polygon 画三角形

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

随机推荐

  1. Netty 模型

    Demo代码 使用Maven的话请在pom.xml中注入netty依赖 <!-- https://mvnrepository.com/artifact/io.netty/netty-all -- ...

  2. class(二)--派生类的继承

    前言 从我之前的一篇笔记对象的继承中, 我们可以知道JS的继承方式依赖原型链,而比较好的继承方式是寄生组合式继承 先来温习下什么是寄生组合式继承 function Rectangle(length, ...

  3. 《ES6标准入门》(阮一峰)--10.对象的扩展

    1.属性的简洁表示法 ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; baz // ...

  4. 073-PHP数组元素相加

    <?php $arr1=array(1,2,3,4,'5','05',TRUE); //等价于 1+2+3+4+5+5+1=21 $arr2=array(1,2,'ABC',3,'hello', ...

  5. 071-PHP数组合并

    <?php $arr1=array('a','b','c'); //定义一个数组 echo '数组$arr1的信息:<br />'; print_r($arr1); //输出数组信息 ...

  6. 《新标准C++程序设计》3.5(C++学习笔记8)

    常量对象和常量成员函数 一.常量对象 如果希望某个对象的值初始化后就再也不被改变,则定义该对象时可以在前面加const关键字,使之成为常量对象. class CDemo { private: int ...

  7. servlet中调用注入spring管理的dao(转)

    今天做大型仪器的的时候遇到的问题,转下为了以后能用 http://blog.csdn.net/jiyingying_up/article/details/44803585 我们用spring的依赖注入 ...

  8. Spring 实战4学习笔记(转)

    http://blog.csdn.net/21aspnet/article/details/51386557 1.IOC装配Bean 参考[spring实战4 2.2],作者提倡无XML配置化. 1. ...

  9. opencv人脸检测

    找了一张自己喜欢的<超人前传>剧照 其中的xml分类器需要到https://github.com/opencv/opencv/tree/master/data/haarcascades去下 ...

  10. Python 加载mnist、cifar数据

    import tensorflow.examples.tutorials.mnist.input_data mnist = input_data.read_data_sets("MNIST_ ...