Как я могу инициализировать новое окно pyqt? - PullRequest
0 голосов
/ 28 февраля 2020
  1. Нажмите в главном окне (A), чтобы открыть новое окно (B).
  2. Сохраните значение в B. Пример кода сохранил имя через fileopen.
  3. Если вы закроете B и снова откроете B с помощью щелчка, то сохраненное ранее значение останется.

Все, что мне нужно, - это нажать и сбросить все значения.

Кроме того, даже если A выключен, в то время как B открыт, B остается.

Я также хочу знать, как решить эту проблему.

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class CombineClass(QDialog):
    def __init__(self, parent=None):
        super(CombineClass, self).__init__(parent)
        self.initUI()

    def initUI(self):
        self.setWindowFlag(Qt.WindowContextHelpButtonHint, False)


        self.label = QPushButton("file name", self)
        self.label.clicked.connect(self.fileselect)
        self.label.move(150,100)

        self.label2 = QLabel("print", self)
        self.label2.move(50,100)

        self.setWindowTitle("combine")
        self.resize(300, 200)
        self.center()
    def fileselect(self):

        filename = QFileDialog.getOpenFileNames(self, "Open Files", "C:\\Users\\", "(*.txt)")
        self.label2.setText(filename[0][0])

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

        self.combine = CombineClass()
    def initUI(self):
        self.fileselect = QPushButton("파일", self)
        self.fileselect.clicked.connect(self.combine)
        self.setWindowTitle("Text Master")
        self.resize(600, 600)
        self.center()
        self.show()
    def combine(self):
        self.combine.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

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

1 Ответ

0 голосов
/ 28 февраля 2020

Логика c действительно проста: создайте метод, который устанавливает значения по умолчанию, а затем вызовите его перед отображением окна:

class CombineClass(QDialog):
    # ...
    def reset(self):
        self.label2.clear()
    # ...

class MyApp(QWidget):
    # ...
    def combine(self):
        self.combine.reset()
        self.combine.show()
    # ...

Другое возможное решение - это создание диалога всякий раз, когда это требуется :

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        <b># self.combine = CombineClass()</b>

    def initUI(self):
        self.fileselect = QPushButton("파일", self)
        self.fileselect.clicked.connect(self.combine)
        self.setWindowTitle("Text Master")
        self.resize(600, 600)
        self.center()
        self.show()

    <b>def combine(self):
        self.combine = CombineClass()
        self.combine.show()
        print("after close")</b>

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...