简体   繁体   English

多个连接按钮GUI PyQt5

[英]Multiple connect button GUI PyQt5

I am trying to build a GUI interface in python 3 using PyQt5. 我正在尝试使用PyQt5在python 3中构建GUI界面。 I have connected a QPushButton to a QLineEdit so that I could clear whatever the user writes, something like this (working within a class): 我已经将QPushButton连接到QLineEdit,以便可以清除用户编写的内容,例如(在类中工作):

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

However, what if I have multiple textboxes and I want the specific button to clear just a selected number of them (for example only textbox A and C)? 但是,如果我有多个文本框,并且希望特定按钮仅清除选定数目的文本框(例如,仅文本框A和C),该怎么办? I tried with: 我尝试过:

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)

but it keeps writing me TypeError: Qt.ConnectionType expected, not 'builtin_function_or_method' 但它一直在给我写TypeError:需要Qt.ConnectionType,而不是'builtin_function_or_method'

Which I don't really understand, 我不是很了解

Can anyone help me? 谁能帮我?

Thanks so much in advance 提前非常感谢

Try it: 试试吧:

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_())                      

在此处输入图片说明

The simplest and most elegant thing is to connect to each function: 最简单,最优雅的方法是连接到每个功能:

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

if you have many, just use a for loop: 如果有很多,只需使用for循环:

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

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

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