from PyQt5.QtWidgets import *
from PyQt5 import uic
form_class = uic.loadUiType("main_window.ui")[0]
class MyWindow(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.ButtonClick)
def ButtonClick(self):
print ("Button Click")
if __name__ == "__main__":
app = QApplication(sys.argv)
myApp = MyWindow()
myApp.show()
app.exec_()
형들 나 완전 개초보라... 어디다가 물어봐야 될지 모르겠어ㅠㅠ
소스는 개 간단함. 그냥 버튼 한 개 있는 윈도우 화면인데...
여기서 윈도우 PostMessage 를 받게 하려면 어떻게 해야돼?
예를들어 WM_CLOSE 이벤트가 발생하면 OnClose 함수를 호출하고 싶다고 하면...?
구글을 겁나 찾아보니
message_map = {
win32con.WM_DESTROY: self.onDestroy,
win32con.WM_CLOSE: self.onClose
}
# Register the Window class.
wc = win32gui.WNDCLASS()
hinst = wc.hInstance = win32api.GetModuleHandle(None)
wc.lpszClassName = "PythonTaskbarDemo"
wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW;
wc.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)
wc.hbrBackground = win32con.COLOR_WINDOW
wc.lpfnWndProc = message_map # could also specify a wndproc.
classAtom = win32gui.RegisterClass(wc)
# Create the Window.
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
self.hwnd = win32gui.CreateWindow(classAtom, "Taskbar Demo", style,
0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
0, 0, hinst, None)
win32gui.UpdateWindow(self.hwnd)
뭐 이런식으로 message_map 튜플에 넣어서 어떻게 하는거 같은데...
처음에 있는 소스에다가 어떻게 대입할지도 모르겠고...
내가 맞게 물어보는지도 모르겠다ㅠㅠ
혹시 아는 형들 있을까?
튜플이 아니다. wc.lpfnWndProc 는 함수다. 메시지가 발생할 때마다 거기 지정된 함수를 시스템에서 자동으로 호출하는 거다
그러면 위의 소스에 대입하려면 어떻게 해야돼?
난 그냥 지나가다가 호기심에 물어보는건데 파이썬인데 이렇게 들여쓰기 안되도 제대로 실행됨?
당연 안 되지. 본문은 그냥 복사 붙여넣기하다가 서식이 깨진 거다
약간 복잡한데 Qt에도 이벤트 루프가 있고 윈도 API에도 자체 메시지 루프가 있으므로 스레드를 하나 더 만들어야 한다. 다른 스레드에서 DispatchMessage 무한 루프 도는 식으로... Qt와 윈도 API를 혼합해야 하는 이유가 있나? 가급적 하나만 쓰는 게...
아 혼합해서 쓰는거는 힘든가 보구나ㅠㅠ 스레드는 아직 모르는데... 알았어 형... 고마워 ㅠㅠ
자바했었누ㅋㅋㅋ