使用pywin32在tkinter上画图的问题
本帖最后由 傻纸 于 2019-9-10 11:59 编辑获得了tkinter的窗口句柄之后,貌似还要捕获tkinter窗口的创建事件(消息)和重绘事件(消息)
因为我直接在tkinter上写绘图的代码是无效的,所以不得不创建一个按钮,通过按钮的回调事件,把图形画出来
from win32gui import *
import win32con
import pywintypes
from tkinter import *
root=Tk()
root.title("tkinterApp")
hwnd = pywintypes.HANDLE(int(root.frame(), 16))
print(hwnd)
hdc=GetDC(hwnd)
def callback():
hbrush=GetStockObject(win32con.NULL_BRUSH)
oldbrush=SelectObject(hdc,hbrush)
Rectangle(hdc,50,50,100,100)
Button(root,text="显示画图",command=callback).pack()
#
#ReleaseDC(hwnd,hdc)
root.geometry("400x400")
#root.mainloop()
这个程序通过点击按钮,画出图形,但是我改变窗口大小的时候,图形就消失了
(我想实现的效果是,tkinter窗口加载完就显示图形,而不需要使用控件的事件回调,窗口刷新的时候,图形还能保持不变)
有熟悉pywin32和tkinter的小伙伴吗,能不能告诉我解决的办法.... 什么无效 塔利班 发表于 2019-9-10 13:17
什么无效
比方我这样写,它就显示不了...
from win32gui import *
import win32con
import pywintypes
from tkinter import *
root=Tk()
hwnd = pywintypes.HANDLE(int(root.frame(), 16))
hdc=GetDC(hwnd)
hbrush=GetStockObject(win32con.NULL_BRUSH)
oldbrush=SelectObject(hdc,hbrush)
Rectangle(hdc,50,50,100,100)
root.geometry("400x400") 本帖最后由 傻纸 于 2019-9-10 14:17 编辑
塔利班 发表于 2019-9-10 13:17
什么无效
按理来说,可能也是要写在回调函数里面,就像win32,它也是在回调函数的,窗口重绘消息里面去画图。可能是要怎么捕获到tkinter窗口的重绘消息,然后把绘图的代码加进去。或者要在tk窗口的WM_CREATE消息里面,加入。。。感觉我对tkinter的事件都感到迷惑了,我理解得有点混乱
-----------
我好像又明白了一些,比如
from win32gui import *
import win32con
import pywintypes
from tkinter import *
root=Tk()
hwnd = pywintypes.HANDLE(int(root.frame(), 16))
hdc=GetDC(hwnd)
def callback(event):
#root.destroy()
hbrush=GetStockObject(win32con.NULL_BRUSH)
oldbrush=SelectObject(hdc,hbrush)
Rectangle(hdc,50,50,100,100)
root.geometry("400x400")
root.bind("<1>",callback)
#root.mainloop()
这样点击鼠标左键画出图。。那应该相当于win32里面的
case WM_LBUTTONDOWN:
{
}
那root窗口重绘事件也应该有,我还没找到... 我貌似找到解决办法了
from win32gui import *
import win32con
import pywintypes
from tkinter import *
root=Tk()
hwnd = pywintypes.HANDLE(int(root.frame(), 16))
hdc=GetDC(hwnd)
def callback(event):
root.update()
hbrush=GetStockObject(win32con.NULL_BRUSH)
oldbrush=SelectObject(hdc,hbrush)
Rectangle(hdc,50,50,100,100)
root.geometry("400x400")
root.bind("<Configure>",callback)
root.mainloop()
这样感觉就没啥问题 顶上去
页:
[1]