PyQt5打开新窗口w / if else

Posted

技术标签:

【中文标题】PyQt5打开新窗口w / if else【英文标题】:PyQt5 opening new window w/ if else 【发布时间】:2020-08-20 05:22:21 【问题描述】:

我正在使用 PyQt5 和 QtDesigner 设计窗口。我做了maindemo.py、maindemo.ui、mainfail.py、mainfail.ui。

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QGraphicsView, QLabel, QMenuBar, QMenu, QStatusBar, QAction, qApp, QMessageBox
from PyQt5 import uic, QtCore

form_class = uic.loadUiType("maindemo.ui")[0]


class OpeningWindow(QMainWindow, form_class):

    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Qomics')

        self.btn_survival.setToolTip('Survival Analysis')
        self.btn_drug.setToolTip('Drug Analysis')
        self.btn_CRISPR.setToolTip('CRISPR Analysis')
        self.btn_cellline.setToolTip('Cell Line')

        self.btn_survival.clicked.connect(self.open_SurvivalMainWindow)
        self.btn_drug.clicked.connect(self.open_DrugWindow)
        self.btn_CRISPR.clicked.connect(self.open_sgRNAWindow)
        self.btn_cellline.clicked.connect(self.open_CellLineWindow)

        actionExit = QAction('&Exit', self)
        actionExit.setShortcut('Ctrl+Q')
        actionExit.setStatusTip('Exit Application')
        actionExit.triggered.connect(qApp.quit)

        self.statusBar().showMessage('abcd')

        self.setGeometry(200, 100, 800, 530)

        self.show()

    def openSurvivalMainWindow(self):
        open_SurvivalMainWindow = SurvivalMainWindow()
        open_SurvivalMainWindow.show()

    def openDrugWindow(self):
        open_DrugWindow = DrugWindow()
        open_DrugWindow.show()

    def opensgRNAWindow(self):
        open_sgRNAWindow = sgRNAWindow()
        open_sgRNAWindow.show()

    def openCellLineWindow(self):
        open_CellLineWindow = scatterWindow()
        open_CellLineWindow.show()

上面的代码是maindemo.py 我想要做的是点击btn_drugbtn_sgRNAbtn_cellline连接到新窗口(@98​​7654326@,mainfail.ui

只有btn_survival连接到真正的功能,其他按钮连接到mainfail窗口。

我尝试使用 if,else... 但我无法编写正确的代码.. 我写了一个代码,但它不起作用。

if openSurvivalMainWindow():

else: 
   openMainFailWindow.show()

【问题讨论】:

一个问题是您将按钮信号连接到self.open_SurvivalMainWindow 等名称中带有下划线,但实际方法的名称中没有下划线。 【参考方案1】:

不清楚你想要什么,但这里是一个多窗口的例子

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QGraphicsView, QLabel, QMenuBar, QMenu, QStatusBar, QAction, qApp, QMessageBox
from PyQt5 import uic, QtCore
from PyQt5.uic import loadUiType

login, _ = loadUiType('login.ui')
registration,_ = loadUiType('registration.ui')

class Register(QMainWindow, registration):
    
    def __init__(self):
        QWidget.__init__(self)
        self.setupUi(self)
        self.pushButton_24.clicked.connect(self.adding_users)
        self.pushButton_25.clicked.connect(self.return_login)

    def return_login(self):

        self.window2 = Login()
        self.close()
        self.window2.show()

class Login(QWidget, login):
    def __init__(self):
        QWidget.__init__(self)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.Handel_Login)
        self.pushButton_2.clicked.connect(self.registrations)
        
    def registrations(self):
    
        self.window2 = Register()
        self.close()
        self.window2.show()
######
#....
######

if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    app.setStyle('Fusion')
    window =  Login()
    #window = MainApp()
    window.show()
    sys.exit(app.exec_())

这样,您的应用程序将首先进入登录页面,如果您按下按钮 2,您将进入注册页面,当然登录页面将被关闭

【讨论】:

以上是关于PyQt5打开新窗口w / if else的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 - 在新窗口中打开 QMediaplayer 并播放视频

关闭并打开新窗口PYQT5

为啥在 PyQt5 中打开新窗口时我的应用程序会关闭?

在 pyqt5 的继承窗口上创建新组件

在 PyQt5 中打开一个窗口和关闭一个窗口

在子 multiprocessing.Process (Python3) 中打开 PyQt5 窗口