![](/img/trans.png)
[英]Is there a way to prevent the taskbar icon from being hidden when hide is called on the parent window?
[英]Icon disappears from taskbar when changing window
我正在尝试创建一个具有多个窗口的 CRUD 应用程序。 列出客户、注册客户、删除客户、编辑客户。 为此,我试图从窗口切换到另一个窗口,问题是当我切换窗口时,任务栏中的图标消失了。 我一定是做错了。 我习惯了 Web 应用程序,这是我的第一个桌面应用程序。
任务栏图标:
伪代码:
我试过 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_())
由于我已经测试了您的代码,我看到无法找到任务栏,因为您正在创建 QDialog 实例,而不是窗口,请尝试创建窗口实例而不是 QDialog 实例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.