[PYTHON] Python : PyQt 팝업 창
PYTHONPython : PyQt 팝업 창
그래서 저는 파이썬 응용 프로그램을위한 Qt로 GUI를 만들고 있습니다. 이제는 버튼이 푸시 된 후 적절한 지연이 실행 된 다음 몇 가지 작업을 수행 한 다음 하나 또는 두 가지가 포함 된 별도의 창을 열어야하는 상황이 발생했습니다. 하지만이 새로운 창을 만드는 방법을 알아낼 수 없습니다. 아무도 나에게 하나를 만드는 방법의 예를 들어 줄 수 있습니까?
해결법
-
==============================
1.미친 듯이 움직일 수있는 흔한 오류는 생성 한 팝업 창의 핸들을 (예 : 메인 창의 데이터 멤버에서) 살아남을 수있는 일부 파이썬 변수에 저장하는 것을 잊어 버리는 것입니다.
미친 듯이 움직일 수있는 흔한 오류는 생성 한 팝업 창의 핸들을 (예 : 메인 창의 데이터 멤버에서) 살아남을 수있는 일부 파이썬 변수에 저장하는 것을 잊어 버리는 것입니다.
다음은 버튼이있는 메인 윈도우를 만드는 간단한 프로그램으로, 버튼을 누르면 팝업이 열립니다
#!/usr/bin/env python #-*- coding: utf-8 -*- import sys from PyQt4.Qt import * class MyPopup(QWidget): def __init__(self): QWidget.__init__(self) def paintEvent(self, e): dc = QPainter(self) dc.drawLine(0, 0, 100, 100) dc.drawLine(100, 0, 0, 100) class MainWindow(QMainWindow): def __init__(self, *args): QMainWindow.__init__(self, *args) self.cw = QWidget(self) self.setCentralWidget(self.cw) self.btn1 = QPushButton("Click me", self.cw) self.btn1.setGeometry(QRect(0, 0, 100, 30)) self.connect(self.btn1, SIGNAL("clicked()"), self.doit) self.w = None def doit(self): print "Opening a new popup window..." self.w = MyPopup() self.w.setGeometry(QRect(100, 100, 400, 200)) self.w.show() class App(QApplication): def __init__(self, *args): QApplication.__init__(self, *args) self.main = MainWindow() self.connect(self, SIGNAL("lastWindowClosed()"), self.byebye ) self.main.show() def byebye( self ): self.exit(0) def main(args): global app app = App(args) app.exec_() if __name__ == "__main__": main(sys.argv)
파이썬 사용자가 놀랄 일이 될 수도 있고, 메인에 새로운 위젯에 대한 참조를 저장하지 않는다면 문제가 될 수도 있습니다. self.w = MyPopup (...) 대신 w = MyPopup (...)을 사용하면 창이 나타나지 않습니다 (실제로 만들어지고 바로 파괴됩니다).
그 이유는 아무도 명시 적으로 위젯을 참조하지 않아서 로컬 변수 w가 범위를 벗어나면 위젯이 삭제된다는 것입니다. 버튼을 다시 누르면 두 번째 팝업이 표시 될 때 첫 번째 팝업 창이 닫히기 때문에이 사실을 명확하게 볼 수 있습니다.
이것은 또한 예를 들어 파이썬 목록에 넣을 수있는 팝업을 여러 개 만들어야하는 경우 사용자가 팝업을 닫으면이 목록에서 팝업을 제거해야 함을 의미합니다. 이 예제에서는 생성자에서 self.w = []로 변경 한 다음 self.w.append (MyPopup (...))를 수행 할 수 있습니다. 그렇게하면 여러 개의 팝업을 열 수 있습니다.
-
==============================
2.일반적으로 someQWidget.show ()와 함께 여러 개의 parentless 창을 표시합니다.
일반적으로 someQWidget.show ()와 함께 여러 개의 parentless 창을 표시합니다.
w1 = QLabel("Window 1") w2 = QLabel("Window 2") w1.show() w2.show()
하지만 가장 가능성이 높습니다. 모달 표준 Dialog를 원합니다. 또한 모달 대화 상자를 이해해야합니다.
from https://stackoverflow.com/questions/4838890/python-pyqt-popup-window by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 훈련 및 테스트 데이터에서 동일한 더미 변수 유지 (0) | 2018.10.21 |
---|---|
[PYTHON] 큰 Numpy 배열 작업을위한 기술? (0) | 2018.10.21 |
[PYTHON] 셀레늄 - visibility_of_element_located : __init __ ()은 정확히 2 개의 인수 (3 개)를 취합니다. (0) | 2018.10.21 |
[PYTHON] Python Twisted JSON RPC (0) | 2018.10.21 |
[PYTHON] Matplotlib 3D scatter 애니메이션 (0) | 2018.10.20 |