Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何修复第二个QMainWindow小部件中缺少的任务栏图标_Python 3.x_Pyqt5 - Fatal编程技术网

Python 3.x 如何修复第二个QMainWindow小部件中缺少的任务栏图标

Python 3.x 如何修复第二个QMainWindow小部件中缺少的任务栏图标,python-3.x,pyqt5,Python 3.x,Pyqt5,我正在制作一个包含欢迎页面和主页的GUI。这样做的目的是让用户同意欢迎页面,欢迎页面将被取消,主页将显示以供进一步操作。然而,任务栏中的图标仅显示在欢迎页面中,当我们点击主窗口时,图标消失,应用程序似乎是屏幕左下角的最小化窗口 起始页和主窗口布局如下所示 类欢迎窗口(qtwidts.QMainWindow): def uuu init uuu(self,parent=None): 超级(欢迎窗口,自我)。\uuuuu初始化\uuuuuu(父级) self.confirm_button=qtwid

我正在制作一个包含欢迎页面和主页的GUI。这样做的目的是让用户同意欢迎页面,欢迎页面将被取消,主页将显示以供进一步操作。然而,任务栏中的图标仅显示在欢迎页面中,当我们点击主窗口时,图标消失,应用程序似乎是屏幕左下角的最小化窗口

起始页和主窗口布局如下所示

类欢迎窗口(qtwidts.QMainWindow):
def uuu init uuu(self,parent=None):
超级(欢迎窗口,自我)。\uuuuu初始化\uuuuuu(父级)
self.confirm_button=qtwidts.QPushButton('Yes')
self.confirm_按钮。单击。连接(self.startup)
Main_layout=qtwidts.QHBoxLayout()
Main\u layout.addWidget(自我确认按钮)
self.main.setLayout(主布局)
def启动(自):
self.close()
对话框=主窗口(自)
self.dialogs.append(对话框)
dialog.show()
类主窗口(QtWidgets.QMainWindow):
def uuu init uuu(self,parent=None):
超级(主窗口,自我)。\uuuuu初始化\uuuuuu(父级)
self.setGeometry(50、50、1500、850)
#以下是后续操作的所有步骤
def main():
app=qtwidts.QApplication(sys.argv)
main=欢迎窗口()
main.show()
sys.exit(app.exec_())
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
我希望如果任务栏上的图标可以一直保持打开状态,这对我的GUI来说将是一件好事。谢谢大家。

首先,您提供的信息不可复制。当我试着运行它时,它就是不起作用。在本例中,您遇到了一个简单的问题,因此我可以猜测您的意图,但当您遇到更复杂的问题时,人们可能无法帮助您。所以在将来,请确保我们可以复制粘贴执行您的代码

主窗口消失的原因是它是欢迎窗口的成员。当您关闭欢迎窗口时,相应的python对象将被删除,因此python将不再具有对主窗口的引用。主窗口对象将被垃圾收集,各种奇怪的事情可能会发生(我希望它会消失)

解决方案是对主窗口的引用在程序关闭之前保持有效。这可以通过在
main
函数中定义它(然后将它作为欢迎窗口的参数)来实现。像这样

import sys
from PyQt5 import QtWidgets

# Use a QWidget if you don't need toolbars.
class welcome_window(QtWidgets.QWidget):

    def __init__(self, main_window=None, parent = None):

        super(welcome_window, self).__init__(parent)
        self.main_window = main_window
        self.confirm_button = QtWidgets.QPushButton('Yes')
        self.confirm_button.clicked.connect(self.startup)
        main_layout = QtWidgets.QHBoxLayout()      # use lower case for variable names
        main_layout.addWidget(self.confirm_button)
        self.setLayout(main_layout) 

    def startup(self):
        self.main_window.show()
        self.close()


class Main_window(QtWidgets.QMainWindow):
    def __init__(self,parent = None):
        super(Main_window, self).__init__(parent)
        self.setGeometry(50, 50, 1500, 850)
        # here is all the step for later operation

        # Don't use self.setLayout on a QMainWindow, 
        # use a central widget and set a layout on that.
        self.main_widget = QtWidgets.QWidget()
        self.setCentralWidget(self.main_widget)
        main_layout = QtWidgets.QHBoxLayout()
        self.main_widget.setLayout(main_layout) 
        main_layout.addWidget(QtWidgets.QLabel("Hello"))


def main():
    app = QtWidgets.QApplication(sys.argv)

    main = Main_window()

    welcome = welcome_window(main_window=main)
    welcome.show()

    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
还有一些建议。不要在
QMainWindow
上使用
setLayout
。使用中心小部件并将小部件添加到中心小部件的布局中。主窗口的布局用于工具栏等。见:

如果您想要一个没有工具栏的简单窗口(如欢迎窗口),只需使用
QWidget


变量名最好用小写,类名最好用大写。例如,我将
Main_布局
重命名为
Main_布局
。看看上面堆栈溢出在语法突出显示方面的差异。

Hi titusjan,非常感谢您的建议,但是在我按照您的指示操作时,当前主窗口和欢迎窗口都会在我单击run时同时出现。有什么问题吗?我看不出有什么问题。您可以尝试在行
main=main\u window()
之后添加
main.hide()
,以显式隐藏主窗口。但这并不是必需的,因为默认情况下窗口是隐藏的。所以我不明白怎么了。你试过不做任何修改就运行我的代码吗?您是从IDE运行的吗?哪一个?嗨,泰特斯詹,现在可以用了!我将pycharm IDE与3.5 python结合使用。添加main.hide()后,它将完成此任务!再次非常感谢你。