PyQt5와 pywin32를 이용하여 QtWidget안에 외부 프로그램 가져오는 방법이 뭐가 있을까요?
조회수 1947회
안녕하세요.
PyQt5를 이용하여 GUI프로그램 개발을 하고 있습니다.
외부 프로그램을 종속시켜 따라다니게끔 만드는 기능을 구현하고 싶습니다.
검색해보니 C#에서는 setParent 함수를 호출하면 된다고 하여 win32gui.SetParent를 호출하니 에러가 납니다.
에러 내용은 pywintypes.error: (87, 'SetParent', '매개 변수가 틀립니다.')
입니다.
따라서 ctypes를 이용하여 ctypes.windll.user32.SetParent()
를 사용하였는데, 에러는 발생하지 않았지만 제대로 작동하지 않았습니다.
어제 저녁부터 시작해 새벽까지 검색해보았는데 해결방법을 잘 모르겠습니다..
혹시 PyQt로 작성한 윈도우에 다른 윈도우를 붙이는 방법이나 제가 간과하고 있는 부분을 알고 계시다면 도와주시면 감사하겠습니다
SetParent관련하여 제가 작성한 코드는 아래와 같습니다.
if __name__ == '__main__':
# pywin32 라이브러리를 이용해 제작한 클래스
wh = WindowHelper()
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint)
Dialog.show()
# SetParent
main = Dialog.winId()
hWnd = wh.getWindow(None, "계산기")
# main 윈도우를 따라 계산기가 움직이지 않음
ctypes.windll.user32.SetParent(hWnd, int(main))
# 에러
win32gui.SetParent(int(main), hWnd)
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
아래 코드 참고해보세요.
import sys from PyQt5.QtWidgets import QApplication, QWidget from ctypes import * class App(QWidget): def __init__(self): super().__init__() self.left=50 self.top=50 self.width=1200 self.height=800 self.initUI() def initUI(self): self.setGeometry(self.left,self.top,self.width,self.height) self.show() if __name__=='__main__': FindWindow = windll.user32.FindWindowW SetParent = windll.user32.SetParent SetWindowPos = windll.user32.SetWindowPos notepad_handle = FindWindow(0, "제목 없음 - Windows 메모장") app = QApplication(sys.argv) ex = App() SetParent(notepad_handle, int(ex.winId())) SetWindowPos(notepad_handle, 0, 100, 100, 400, 600, 0) sys.exit(app.exec_())
- 먼저 메모장을 실행한 뒤 파이썬 스크립트를 실행하세요. 정영훈 2019.11.10 18:48
- 답변 감사합니다. 계산기는 제대로 따라오지가 않네요 ㅎㅎ.. ㅠㅠ 혼자 개발하다보니 우선 다른기능부터 개발하고 있었는데, 답변 달린 것을 보고 해보았더니 잘 됩니다! 제가 짠 코드와 다른 점이 무엇인지, 왜 안됐는지 알아보려해도 아직은 잘 모르겠네요 ㅎㅎ.. 답변 참고하여 꼭 알아보겠습니다. 다시한번 감사드립니다 알 수 없는 사용자 2019.11.13 02:46
- 이유를 상세히 적지 않은 것은 파이썬이 아닌 윈도우 시스템 프로그래밍 영역이라 적지 않았습니다. 윈도우 api 인 FindWindow, SetParent, SetWindowPos 대해서 선학습이 되어야 합니다. 정영훈 2019.11.13 03:03
댓글 입력