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 ...
随机推荐
- centos yum安装redis,nginx
先安装源 yum install epel-release 之后 分别安装redis,nginx
- JS - 查找字符串中的某个值,截取其之前。和之后的值
var str = "11:222"; /* * 截取 “ :”之前和之后的值 */document.write(str.split(':')[0]) //输出11doc ...
- JNI调用so动态库
1.编写native接口 package org.demo; public class JniDemo { public static native int bmp2fea(byte[] bmp, b ...
- list实体数据分组
比如查询获取了60000条数据进行批量插入数据库,一次直接插入6万可能不是很好,可以将6万条数据按照5000分成几组,每组批量插入5000条 List<T> list = new List ...
- Reference在Essay写作中的最佳占比是多少?
很多同学在写完Essay作业后 就觉得大功告成了 并不是很注重参考文献 导致查重率过高 面临抄袭.取消成绩. 甚至被退学的情况 或者在essay写作中勉强标出几处 非常随意的在后面列出 其实这是很不正 ...
- C# Process类详解
C# Process类详解 Process[] processes = Process.GetProcessesByName(current.ProcessName); 根据进程名字找到所有进程,返回 ...
- POJ 1039:Pipe 计算几何
Pipe Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9773 Accepted: 2984 Description ...
- 大数据高可用集群环境安装与配置(10)——安装Kafka高可用集群
1. 获取安装包下载链接 访问https://kafka.apache.org/downloads 找到kafka对应版本 需要与服务器安装的scala版本一致(运行spark-shell可以看到当前 ...
- BZOJ:2190: [SDOI2008]仪仗队
题解:欧拉函数 #include<iostream> #include<cstdio> #include<cstring> using namespace std; ...
- WebFlux系列(十二)MongoDB应用,新增、修改、查询、删除
#Java#Spring#SpringBoot#Mongo#reactor#webflux#数据库#新增#修改#查询#删除# Spring Boot WebFlux Mongo数据库新增.删除.查询. ...