繁体   English   中英

PyQt5多窗口

[英]PyQt5 multi-window

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'PyosUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

import sys

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import (
    QApplication,
    QLabel,
    QMainWindow,
    QPushButton,
    QVBoxLayout,
    QWidget
)
class GameWindow(QWidget):
    def __init__(self):
        super.__init__()
        layout = QVBoxLayout()
        self.label = QLabel("Hello!")
        layout.addWidget(self.label)
        self.setLayout(layout)
        
class Ui_Dialog(object):      
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.setEnabled(True)
        Dialog.resize(1044, 601)
        self.Notepad = QtWidgets.QPushButton(Dialog)
        self.Notepad.setGeometry(QtCore.QRect(50, 520, 281, 61))
        self.Notepad.setObjectName("Notepad")
        self.Game = QtWidgets.QPushButton(Dialog)
        self.Game.setGeometry(QtCore.QRect(390, 520, 271, 61))
        self.Game.setObjectName("Game")
        self.Poweroff = QtWidgets.QPushButton(Dialog)
        self.Poweroff.setGeometry(QtCore.QRect(690, 520, 111, 31))
        self.Poweroff.setObjectName("Poweroff")
        self.Settings = QtWidgets.QPushButton(Dialog)
        self.Settings.setGeometry(QtCore.QRect(690, 560, 111, 31))
        self.Settings.setObjectName("Settings")
        self.Date_time = QtWidgets.QDateTimeEdit(Dialog)
        self.Date_time.setGeometry(QtCore.QRect(840, 20, 194, 22))
        self.Date_time.setObjectName("Date_time")
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(0, -20, 1051, 641))
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("background.png"))
        self.label.setObjectName("label")
        self.label.raise_()
        self.Notepad.raise_()
        self.Game.raise_()
        self.Poweroff.raise_()
        self.Settings.raise_()
        self.Date_time.raise_()

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

        l = QVBoxLayout()
        self.Game.clicked.connect(self.button_clicked)
        l.addWidget(self.Game)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "PyOS"))
        self.Notepad.setText(_translate("Dialog", "Notepad"))
        self.Game.setText(_translate("Dialog", "Game"))
        self.Poweroff.setText(_translate("Dialog", "Poweroff"))
        self.Settings.setText(_translate("Dialog", "Settings"))
    def game_window(self):
        game_window = QtWidgets.QDialog()
        game_window.setWindowTitle("Game")
        game_window.resize(600, 600)
        game_window.show()

    def button_clicked(self):
        self.game_window()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

上面的代码是我用Pyqt5设计器做的UI。 对于我想做的工作,当点击“游戏”按钮时,应该会出现一个专用于“游戏”按钮的 window。

但是,当我运行上面的代码时,当我按下“游戏”按钮时,会出现 600 x 600 window 然后消失。

为什么? 我还能如何解决这个问题?

谢谢你。

game_window是 Ui_Dialog 中Ui_Dialog game_window()方法中的一个局部变量。 将 window 设置为实例,应该没问题。

修改方法

# other code remains same.

    def game_window(self):
        self._game_window = QtWidgets.QDialog()
        self._game_window.setWindowTitle("Game")
        self._game_window.resize(600, 600)
        self._game_window.show()

编辑:添加下划线( _ )的原因是为了避免与方法名称同名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM