PyQt5에서 화면 A에서 화면 B를 여러 창으로 출력

10895 단어 QtPyQt5
화면 A


버튼을 클릭하면 화면 B에서 선택한 커피의 특징이 나옵니다.
그러면, 화면 B를 복수 표시해, 비교하고 싶어지네요.

하지만 넷상에 있는 샘플이라면 화면 B를 하나밖에 출력할 수 없습니다.
여러가지 생각한 결과, 이하와 같이 하면 복수 출력할 수 있었습니다.

coffee.py
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QHBoxLayout, QLabel
import coffeeInfo


class App(QWidget):

    def __init__(self):
        super().__init__()

        self.title = "aa"
        self.setWindowTitle(self.title)
        self.setGeometry(300, 300, 300, 150)

        self.ex_list = []

        self.init_ui()
        self.show()

    def init_ui(self):
        button1 = QPushButton('コーヒーA', self)
        button1.clicked.connect(self.on_click)

        button2 = QPushButton('コーヒーB', self)
        button2.clicked.connect(self.on_click)

        button3 = QPushButton('コーヒーC', self)
        button3.clicked.connect(self.on_click)

        label = QLabel("好きなコーヒーを選んでください", self)

        hbox = QHBoxLayout()
        hbox.addWidget(button1)
        hbox.addWidget(button2)
        hbox.addWidget(button3)

        vbox = QVBoxLayout()
        vbox.addWidget(label)
        vbox.addLayout(hbox)

        self.setLayout(vbox)

    def on_click(self):
        button = self.sender()
        self.ex_list.append(coffeeInfo.App(button.text()))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

coffeeInfo.py
from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout


class App(QWidget):

    def __init__(self, select):
        super().__init__()

        self.title = select
        self.setWindowTitle(self.title)
        self.setGeometry(650, 200, 300, 150)

        self.select = select

        self.ex_list = []

        self.init_ui()
        self.show()

    def init_ui(self):

        info = {"コーヒーA": "まったりとして、それでいてしつこくない",
                "コーヒーB": "アラビカとかロブスタですね",
                "コーヒーC": "女だ……女がいる!!!!"}

        label = QLabel(info[self.select], self)

        vbox = QVBoxLayout()
        vbox.addWidget(label)
        self.setLayout(vbox)

바꾼 곳



(이전) self.ex = coffeeInfo.AppApp()
(후) self.ex_list.append(coffeeInfo.App())

목록으로 변경 중입니다.

설명!



self.ex = coffeeInfo.App()는 App 클래스의 객체를 생성하고 ex라는 변수에 넣습니다.
이것이라면 self.ex에는 하나의 객체 만 들어 있기 때문에 화면도 하나밖에 만들 수 없습니다.

self.ex_list.append(coffeeInfo.App()) 라고 하면,
  • 최초로 출력되는 화면 B는 self.ex_list[0]
  • 다음에 출력되는 화면 B는 self.ex_list [1]
  • 다음에 출력되는 화면 B는 self.ex_list [2]

  • 그리고 다른 변수에 들어가므로 여러 화면이 출력됩니다.

    좋은 웹페이지 즐겨찾기