QtCore.QMetaObject.connectSlotsByName:根据objectName和signal自动绑定slot

简介:   from PyQt5.QtWidgets import (QWidget , QVBoxLayout , QHBoxLayout, QLineEdit, QPushButton) from PyQt5.

 

 

from PyQt5.QtWidgets import (QWidget
            , QVBoxLayout , QHBoxLayout, 
             QLineEdit, QPushButton)

from PyQt5.QtCore import  pyqtSignal
from PyQt5 import QtCore
##############################################

# 参考大丸子的博客
#http://jimmykuu.sinaapp.com/blog/11






class LoginView(QWidget):
    
    ## 登录界面时发送 关闭信号
    quitSignal = pyqtSignal()
    loginSignal = pyqtSignal(list)
    # server端没有响应
    openFailureSignal = pyqtSignal()
    
    

    
    
    def __init__(self, parent=None):
        super(LoginView, self).__init__(parent)
        self.ids_receive = []
        
        self._init_ui()


        
    def _init_ui(self):    

        layout_button = QHBoxLayout()       
        layout_input = QHBoxLayout()       
        
        self.input_name = QLineEdit()
        self.input_pass = QLineEdit()
        
        
        button_login =  QPushButton("登录")
        button_login.setObjectName("ok_button")
        
        button_quit  =  QPushButton("取消")
        button_hello  =  QPushButton("hello")
        self.button_hello = button_hello
        button_hello.setObjectName("hello_button")

        #button_login.clicked.connect(self.do_login)
        #button_quit.clicked.connect(self.loginQuit)
        
        layout_button.addWidget(button_login)
        layout_button.addWidget(button_quit)
        
        layout_input.addWidget(self.input_name)
        layout_input.addWidget(self.input_pass)
        layout_input.addWidget(self.button_hello)
        
  
        layout_main = QVBoxLayout()  
        self.setLayout(layout_main)
        layout_main.addLayout(layout_button)
        layout_main.addLayout(layout_input)
   
        # QMetaObject. connectSlotsByName(QObject)
        #网上百度到的说明:其作用是如其名称一样,用来将QObject 里的子孙QObject的某些信号按照其objectName连接到相应的槽上
        #       ,如 button_hello.setObjectName("hello_button")
        # 官网解释用法: http://doc.qt.io/qt-5/qmetaobject.html#connectSlotsByName
        QtCore.QMetaObject.connectSlotsByName(self)
     
    def loginQuit(self):
        print ("cencel")
    
    #试试注销掉该装饰器
    # 有点奇怪啊,一旦注释掉装饰器,打印会执行两次啊
    #QtCore.pyqtSlot(str, str)可以携带参数的
    @QtCore.pyqtSlot() 
    def on_hello_button_clicked(self):   
        print('on_pbHello_clicked')
       
    @QtCore.pyqtSlot()    
    def on_ok_button_clicked(self):
        print ("OK")
        self.loginSignal.emit([1, 2])
        

        
    def do_login(self):
        #获取用户和密码文本框的内容
        u_name = self.input_name.text()
        u_pass =  self.input_pass.text()
        
       
        print('u_name', u_name, u_pass)
        
        

        
if __name__ == '__main__':

    import sys
    from PyQt5.QtWidgets import QApplication
    app = QApplication(sys.argv)    

    login = LoginView()
    login.show()

    sys.exit(app.exec_())

  

 

相关文章
|
8月前
|
JavaScript
state 和 props 触发更新的生命周期分别有什么区别?
state 和 props 触发更新的生命周期分别有什么区别?
|
4月前
|
小程序
小程序v-for中slot警告
小程序v-for中slot警告
66 0
|
5月前
|
JavaScript 容器
如何理解slot?slot使用场景有哪些?
如何理解slot?slot使用场景有哪些?
39 0
|
7月前
|
JavaScript
说说你对slot的理解?slot使用场景有哪些?
说说你对slot的理解?slot使用场景有哪些?
91 1
Revit空闲事件(Idling Event)增强和外部事件(External Event)
Revit空闲事件(Idling Event)增强和外部事件(External Event)
Revit空闲事件(Idling Event)增强和外部事件(External Event)
uiu
|
JavaScript
【Svelte】-(7)绑定|Each 块绑定 / audio video 媒体标签绑定 / client offset 尺寸绑定 / this / 组件绑定
【Svelte】-(7)绑定|Each 块绑定 / audio video 媒体标签绑定 / client offset 尺寸绑定 / this / 组件绑定
uiu
77 0
【Svelte】-(7)绑定|Each 块绑定 / audio video 媒体标签绑定 / client offset 尺寸绑定 / this / 组件绑定
|
JavaScript API 数据处理
|
JavaScript
解决input 有多少个radio绑定change事件,手动触发就会执行多少次问题
如题,相信大家都会遇到这个问题,那么为什么会触发多次呢?其实当你用jquery绑定onchange事件的时候你就无形中给每个radio绑定了事件,所以才会出现执行多少次的问题了,那么如何解决呢,其实这个问题就是最好的解决方法了,你想阿,一组radio当然只会选中一个,但是没有 选中的radio也会执...
1143 0
Item描述信息的更改也会导致will trigger ORDERADM_H的update函数触发
Item描述信息的更改也会导致will trigger ORDERADM_H的update函数触发
106 0
Item描述信息的更改也会导致will trigger ORDERADM_H的update函数触发