PyQT5 - значок исчезает с панели задач при смене окна - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь создать приложение CRUD, в котором оно имеет несколько windows. Список клиентов, регистрация клиентов, удаление клиентов, редактирование клиентов. Для этого я пытаюсь переключиться из окна в другое окно, проблема в том, что при переключении окна значок на панели задач исчезает. Я должен делать это неправильно. Я привык к веб-приложениям, это мое первое настольное приложение.

Значок панели задач:

enter image description here

Псевдокод:

Я пробовал QStackedWidget, но настройка страниц из индекса не выглядит хорошо, когда у вас много страниц.

Я обновил свой вопрос с помощью QMainWindow, я не использовал QWindow, потому что он не поддерживает setLayout, например.

import sys
import time
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QMainWindow, QDialog, QApplication, QDesktopWidget, QGridLayout, QLabel, QWidget


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'Main Window'
        self.top = 100
        self.left = 100
        self.width = 350
        self.height = 200
        self.InitUI()
        self.show()

    def InitUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.top, self.left, self.width, self.height)

        qtRectangle = self.frameGeometry()
        centerPoint = QDesktopWidget().availableGeometry().center()
        qtRectangle.moveCenter(centerPoint)
        self.move(qtRectangle.topLeft())

        layout = QGridLayout()

        label1 = QLabel('First Screen - Please wait...')
        label1.setFont(QFont("Times", 25, QFont.Bold))
        layout.addWidget(label1, 0, 0, Qt.AlignCenter)

        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

        QTimer.singleShot(5000, self.goToSecondScreen)

    def goToSecondScreen(self):
        w = SecondWindow(parent=self)
        w.show()
        self.hide()


class SecondWindow(QMainWindow):
    def __init__(self, parent):
        super().__init__(parent=parent)
        self.title = 'Second Window'
        self.top = 100
        self.left = 100
        self.width = 680
        self.height = 500
        self.InitUI()
        self.show()

    def InitUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.top, self.left, self.width, self.height)

        qtRectangle = self.frameGeometry()
        centerPoint = QDesktopWidget().availableGeometry().center()
        qtRectangle.moveCenter(centerPoint)
        self.move(qtRectangle.topLeft())

        layout = QGridLayout()

        label1 = QLabel('Second Screen - Please wait...')
        label1.setFont(QFont("Times", 25, QFont.Bold))
        layout.addWidget(label1, 0, 0, Qt.AlignCenter)

        self.setLayout(layout)

        QTimer.singleShot(5000, self.goToThirdWindow)

    def goToThirdWindow(self):
        w = ThirdWindow(parent=self)
        w.show()
        self.hide()


class ThirdWindow(QMainWindow):
    def __init__(self, parent):
        super().__init__(parent=parent)
        self.title = 'Third Window'
        self.top = 100
        self.left = 100
        self.width = 680
        self.height = 500
        self.InitUI()
        self.show()

    def InitUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.top, self.left, self.width, self.height)

        qtRectangle = self.frameGeometry()
        centerPoint = QDesktopWidget().availableGeometry().center()
        qtRectangle.moveCenter(centerPoint)
        self.move(qtRectangle.topLeft())

        layout = QGridLayout()

        label1 = QLabel('ThirdWindow Screen')
        label1.setFont(QFont("Times", 25, QFont.Bold))
        layout.addWidget(label1, 0, 0, Qt.AlignCenter)

        self.setLayout(layout)


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

1 Ответ

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

протестировав ваш код, я увидел, что панель задач не может быть найдена, потому что вы создаете экземпляры QDialog, а не окна, попробуйте создать экземпляр окна, а не экземпляра QDialog

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...