【问题标题】:Multiple connect button GUI PyQt5多个连接按钮 GUI PyQt5
【发布时间】:2018-12-26 22:04:10
【问题描述】:

我正在尝试使用 PyQt5 在 python 3 中构建 GUI 界面。我已经将 QPushButton 连接到 QLineEdit 以便我可以清除用户写的任何内容,如下所示(在类中工作):

self.textboxA = QLineEdit(self)
self.buttonA = QPushButton('Clear', self)
self.buttonA.clicked.connect(self.textboxA.clear)

但是,如果我有多个文本框,并且我希望特定按钮仅清除其中的选定数量(例如仅文本框 A 和 C),该怎么办?我试过了:

self.textboxA = QLineEdit(self)
self.textboxB = QLineEdit(self)
self.textboxC = QLineEdit(self)
self.buttonA = QPushButton('Clear', self)
self.buttonA.clicked.connect(self.textboxA.clear,
                             self.textboxC.clear)

但它一直给我写 TypeError: Qt.ConnectionType expected, not 'builtin_function_or_method'

我不太明白,

谁能帮帮我?

提前非常感谢

【问题讨论】:

    标签: python python-3.x pyqt pyqt5


    【解决方案1】:

    最简单最优雅的就是连接每个函数:

    self.buttonA.clicked.connect(self.textboxA.clear)
    self.buttonA.clicked.connect(self.textboxC.clear)
    

    如果你有很多,只需使用 for 循环:

    for textbox in (self.textboxA, self.textboxB, self.textboxC):
        self.buttonA.clicked.connect(textbox.clear)
    

    【讨论】:

      【解决方案2】:

      试试看:

      import sys
      from PyQt5.QtWidgets import (QMainWindow, QApplication, QWidget,
                                   QLineEdit, QPushButton, QVBoxLayout)
      
      
      class MainWindow(QMainWindow):
          def __init__(self):
              super().__init__()
      
              main_layout = QVBoxLayout()
      
              self.textboxA = QLineEdit()
              self.textboxB = QLineEdit()
              self.textboxC = QLineEdit()
              self.buttonA  = QPushButton('Clear -> textboxA, textboxC')
              self.buttonA.clicked.connect(self.clearTextboxs)        
      
              main_layout.addWidget(self.textboxA) 
              main_layout.addWidget(self.textboxB)
              main_layout.addWidget(self.textboxC)
              main_layout.addWidget(self.buttonA)
      
              central_widget = QWidget()
              central_widget.setLayout(main_layout)
      
              self.setCentralWidget(central_widget)        
      
          def clearTextboxs(self):
              self.textboxA.clear()
              self.textboxC.clear()
      
      if __name__ == '__main__':
          app = QApplication(sys.argv)
          w = MainWindow() 
          w.show()
          sys.exit(app.exec_())                      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-05
        • 2019-04-30
        相关资源
        最近更新 更多