pywin32获得tkinter的Canvas窗口句柄,并在上面绘图
上一篇博文获得主窗口句柄使用的是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窗口句柄,并在上面绘图的更多相关文章
- Tkinter画布-Canvas
Python - Tkinter画布-Canvas: Canvas是一个长方形的面积,图画或其他复杂的布局.可以放置在画布上的图形,文字,部件,或是帧 Canvas是一个长方形的面积,图画或其他复杂的 ...
- tkinter之canvas(画布)
画布的例子: from tkinter import * root=Tk() root.title('简易绘图') can=Canvas(root,width=400,height=300,bg='# ...
- pywin32获得tkinter窗口句柄,并在上面绘图
想实现用win32 API在tkinter窗口上画图,那么应该先获得tkinter窗口的句柄hwnd,然后再获得tkinter的设备hdc.尝试了FindWindow(),GetActiveWindo ...
- Python3 tkinter基础 Canvas delete 删除画布中的所有图形
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3 tkinter基础 Canvas create_text 在画布上添加文字
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3 tkinter基础 Canvas create_rectangle 画虚边的矩形 create_oval 画椭圆形 圆形
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3 tkinter基础 Canvas create_rectangle 画矩形
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3 tkinter基础 Canvas create_line 画实线与虚线
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3 tkinter基础 Canvas create_polygon 画三角形
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
随机推荐
- Unity Reflection Probe使用入门
贴官方API的说法: 反射探头: 一个反射探头很像一个相机,捕获了周围所有方向的球形视图.然后将捕获的图像存储为Cubemap,可由具有反射材料的对象使用.在给定场景中可以使用多个反射探测器,可以将对 ...
- 吴裕雄--天生自然java开发常用类库学习笔记:IdentityHashMap类
import java.util.IdentityHashMap ; import java.util.HashMap ; import java.util.Set ; import java.uti ...
- 01 DDL(DataDefinitionLanguage)
注: 语句用 ; 或 \g \G 表示结束 . 建库语句 : CREATE DATABASE db_name ; 查询有哪些库 : SHO ...
- checkbox checked属性值
记住我1<input type='checkbox' /> 记住我2<input type='checkbox' /> <button onclick='hehe();' ...
- POJ 3916:Duplicate Removal 将相近的重复元素删除
Duplicate Removal Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1745 Accepted: 1213 ...
- PYTHON画三维图
import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dimport numpy as np #bbb=[1 if ...
- gitolite服务器配置的一些心得
1.假设说有服务器1,hostname为lab1,服务器2,hostname为lab2,分别生成的给对方使用的公钥为server-lab1.pub.server-lab2.pub,服务器1和2都有自己 ...
- Andriod studio 汉化教程
1.找到安装目录,D:\Program Files\Android\Android Studio\lib,先保存resources_en,并且把它的名字改为resources_cn.jar 2.下载汉 ...
- css实现三角箭头(兼容IE6)
纯css实现三角箭头有几种方式,常规的方式用css3的rotate把元素旋转45度角,无法兼容ie的主要原因是ie不支持边框透明, 第二种方法,使用chroma滤镜透明,经尝试在ie下会出现activ ...
- 算法实战(六)Z 字形变换
一.前言 之前因为第五题最长回文字符串需要使用到dp解法,所以我花了很长的时间来研究dp(因为每天又要上班,加上这段时间事情比较多,所以花了三个星期才搞定),好不容易算入了个门,有兴趣的同学可以看看我 ...