首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtCore.signal什么也不做

QtCore.signal什么也不做
EN

Stack Overflow用户
提问于 2022-06-02 09:13:11
回答 1查看 35关注 0票数 0

我是PyQt5的初学者,很难使用QtCore.signal

当我按下按钮并切换当前显示的小部件时,我想发送一个信号。我在运行代码时没有任何错误,但是当我按下按钮时,什么都不会发生,我想这是因为我对QtCore.Signal做了一些错误

这是我的代码:

代码语言:javascript
复制
from PySide2 import QtCore, QtWidgets
from ui_Page_accueil import Ui_MainWindow
from ui_NouvelleVerif import Ui_Dialog as Ui_NouvelleVerif
from ui_NouvelleVerifEssieux import Ui_Dialog as Ui_NouvelleVerifEssieux
import sys


class MainWindowUi(Ui_MainWindow):

    to_NouvelleVerif = QtCore.Signal()

    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setupUi(self)

        #self.pushButton.clicked.connect(self.pushbutton_handler1)
        self.pushButton_2.clicked.connect(self.pushbutton_handler2)
        


    #def pushbutton_handler1(self):
    #    self.to_MainWindow.emit()

    def pushbutton_handler2(self):
        self.to_NouvelleVerif.emit()
        
 
    
class NouvelleVerifUi(QtWidgets.QWidget, Ui_NouvelleVerif):

    to_MainWindow = QtCore.Signal()
    to_NouvelleVerifEssieux = QtCore.Signal()

    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setupUi(self)

        self.pushButton.clicked.connect(self.pushbutton_handler1)
        #self.pushButton_2.clicked.connect(self.pushbutton_handler2)
        self.pushButton_3.clicked.connect(self.pushbutton_handler3)


    def pushbutton_handler1(self):
        self.to_MainWindow.emit()

    #def pushbutton_handler2(self):
    #    self.switch_window.emit()

    def pushbutton_handler3(self):
        self.to_NouvelleVerifEssieux.emit()
        


class NouvelleVerifEssieuxUi(QtWidgets.QWidget, Ui_NouvelleVerifEssieux):

    to_NouvelleVerif = QtCore.Signal()

    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setupUi(self)

        self.pushButton.clicked.connect(self.pushbutton_handler1)


    def pushbutton_handler1(self):
        self.to_NouvelleVerif.emit()


class Controller :
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QStackedWidget()
    MainWindow = MainWindowUi()
    NouvelleVerif = NouvelleVerifUi() 
    NouvelleVerifEssieux = NouvelleVerifEssieuxUi()     


    
        
    

    def __init__(self):
        
        self.widget.addWidget(self.MainWindow)   # create an instance of the first page class and add it to stackedwidget
        self.widget.addWidget(self.NouvelleVerif)   # adding second page   
        self.widget.addWidget(self.NouvelleVerifEssieux)
        self.widget.setCurrentWidget(self.MainWindow)   # setting the page that you want to load when application starts up. you can also use setCurrentIndex(int)

        


    def show_MainWindow(self):
        self.NouvelleVerif = NouvelleVerifUi()
        
        self.NouvelleVerif.to_MainWindow.connect(self.show_MainWindow)
        
        self.widget.setCurrentWidget(self.MainWindow)

    def show_NouvelleVerif(self):
        self.MainWindow = MainWindowUi()
        self.NouvelleVerifEssieux = NouvelleVerifEssieuxUi()
        
        self.MainWindow.to_NouvelleVerif.connect(self.show_NouvelleVerif)
        self.NouvelleVerifEssieux.to_NouvelleVerif.connect(self.show_NouvelleVerif)

        self.widget.setCurrentWidget(self.NouvelleVerif)
        
    def show_NouvelleVerifEssieux(self):
        self.NouvelleVerif = NouvelleVerifUi()

        self.NouvelleVerif.to_NouvelleVerifEssieux.connect(self.show_NouvelleVerifEssieux)

        self.widget.setCurrentWidget(self.NouvelleVerifEssieux)
    
            

def main():
     
    controller = Controller()
    controller.widget.show()
    sys.exit(controller.app.exec_())

if __name__ == '__main__':
    main()
EN

回答 1

Stack Overflow用户

发布于 2022-06-03 08:24:42

@musicamante我不知道为什么我认为QtCore.Signal可以被调用,即使他在一个没有被调用的函数中。我照你说的做了,我意识到我在小部件上又犯了一个错误。

在控制器类中,它们被创建并添加到QStackedWidget中的__init__中,但是我创建了新的类,并试图将它们设置为CurrentWidget,而不将它们添加到QStackedWidget中。

@alexpdev我想以这样的方式浏览我在pushButton UI中的三个不同之处:

MainWindowUI开始

代码语言:javascript
复制
MainWindowUI pushButton_2.clicked --> set the current widget display to NouvelleVerifUI

NouvelleVerifUI pushButton_1.clicked --> set the current widget display back to MainWindowUI 

NouvelleVerifUI pushButton_3.clicked --> set the current widget display to NouvelleVerifEssieuxUI  

NouvelleVerifEssieuxUI pushButton_1.clicked --> set the current widget display back to NouvelleVerifUI  

现在一切都正常了,我做了你说的@musicamante,我还使用了最初创建的UI。

代码语言:javascript
复制
class Controller :
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QStackedWidget()
    MainWindow = MainWindowUi()
    NouvelleVerif = NouvelleVerifUi() 
    NouvelleVerifEssieux = NouvelleVerifEssieuxUi()        
 
    def __init__(self):
        
        self.widget.addWidget(self.MainWindow)   # create an instance of the first page class and add it to stackedwidget
        self.widget.addWidget(self.NouvelleVerif)   # adding second page   
        self.widget.addWidget(self.NouvelleVerifEssieux)
        self.widget.setCurrentWidget(self.MainWindow)   # setting the page that you want to load when application starts up. you can also use setCurrentIndex(int)
        
        
        self.NouvelleVerif.to_MainWindow.connect(self.show_MainWindow)
        self.MainWindow.to_NouvelleVerif.connect(self.show_NouvelleVerif)
        self.NouvelleVerifEssieux.to_NouvelleVerif.connect(self.show_NouvelleVerif)
        self.NouvelleVerif.to_NouvelleVerifEssieux.connect(self.show_NouvelleVerifEssieux)

    def show_MainWindow(self):
        self.widget.setCurrentWidget(self.MainWindow)

    def show_NouvelleVerif(self):
        self.widget.setCurrentWidget(self.NouvelleVerif)
        
    def show_NouvelleVerifEssieux(self):
        self.widget.setCurrentWidget(self.NouvelleVerifEssieux)

谢谢大家抽出时间

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72473684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档