Python 如何显示QPushButton的列表?

Python 如何显示QPushButton的列表?,python,qt,list,pyside,qpushbutton,Python,Qt,List,Pyside,Qpushbutton,我是qt noob,我正在尝试构建一个需要显示以下内容的应用程序: from PySide import QtCore, QtGui class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(311, 499) self.gridLayoutWidget = QtGui.QWidget(Dialog) self.grid

我是qt noob,我正在尝试构建一个需要显示以下内容的应用程序:

from PySide import QtCore, QtGui

class Ui_Dialog(object):
    def setupUi(self, Dialog):
    Dialog.setObjectName("Dialog")
    Dialog.resize(311, 499)
    self.gridLayoutWidget = QtGui.QWidget(Dialog)
    self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 10, 291, 371))
    self.gridLayoutWidget.setObjectName("gridLayoutWidget")
    self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
    self.gridLayout.setContentsMargins(0, 0, 0, 0)
    self.gridLayout.setObjectName("gridLayout")
    # self.dockWidget = QtGui.QDockWidget(self.gridLayoutWidget)
    # self.dockWidget.setObjectName("dockWidget")
    # self.dockWidgetContents = QtGui.QWidget()
    # self.dockWidgetContents.setObjectName("dockWidgetContents")
    # self.dockWidget.setWidget(self.dockWidgetContents)
    # self.gridLayout.addWidget(self.dockWidget, 0, 0, 1, 1)


    self.leftList = QtGui.QListWidget(self.gridLayoutWidget)
    self.gridLayout.addWidget(self.leftList, 0, 0, 1, 1)
    self.middleList = QtGui.QListWidget(self.gridLayoutWidget)
    self.gridLayout.addWidget(self.middleList, 0, 1, 1, 1)
    self.rightList = QtGui.QListWidget(self.gridLayoutWidget)
    self.gridLayout.addWidget(self.rightList, 0, 2, 1, 1)

    self.progressBar = QtGui.QProgressBar(Dialog)
    self.progressBar.setGeometry(QtCore.QRect(10, 410, 231, 23))
    self.progressBar.setInputMethodHints(QtCore.Qt.ImhNone)
    self.progressBar.setMaximum(30)
    self.progressBar.setProperty("value", 30)
    self.progressBar.setInvertedAppearance(False)
    self.progressBar.setTextDirection(QtGui.QProgressBar.TopToBottom)
    self.progressBar.setObjectName("progressBar")
    self.label = QtGui.QLabel(Dialog)
    self.label.setGeometry(QtCore.QRect(240, 413, 51, 16))
    self.label.setObjectName("label")
    self.pushButton = QtGui.QPushButton(Dialog)
    self.pushButton.setGeometry(QtCore.QRect(10, 440, 291, 51))
    self.pushButton.setObjectName("pushButton")
    self.line = QtGui.QFrame(Dialog)
    self.line.setGeometry(QtCore.QRect(10, 390, 291, 20))
    self.line.setFrameShape(QtGui.QFrame.HLine)
    self.line.setFrameShadow(QtGui.QFrame.Sunken)
    self.line.setObjectName("line")

    self.retranslateUi(Dialog)
    QtCore.QMetaObject.connectSlotsByName(Dialog)

def retranslateUi(self, Dialog):
    Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
    self.progressBar.setFormat(QtGui.QApplication.translate("Dialog", "%vs", None, QtGui.QApplication.UnicodeUTF8))
    self.label.setText(QtGui.QApplication.translate("Dialog", "TimeOut", None, QtGui.QApplication.UnicodeUTF8))
    self.pushButton.setText(QtGui.QApplication.translate("Dialog", "Refresh", None, QtGui.QApplication.UnicodeUTF8))
  • 电子邮件列表(显示在网格布局的第1列中) 带有QListWidget1(左列表)

  • 密码列表(我在QListWidget2中间列表的网格布局第2列中显示)

现在,我想显示一个按钮列表(列表中的每个元素都有一个按钮),它应该复制QListWidget2中的密码

我是否应该在第3列中循环并为每一行添加一个按钮?还是有更好的方法?是否有一个对象可以帮助我按照列表中的元素排列按钮,以便我可以轻松地将它们与列表中每个条目的值连接起来(以便以后复制)

我的代码如下:

from PySide import QtCore, QtGui

class Ui_Dialog(object):
    def setupUi(self, Dialog):
    Dialog.setObjectName("Dialog")
    Dialog.resize(311, 499)
    self.gridLayoutWidget = QtGui.QWidget(Dialog)
    self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 10, 291, 371))
    self.gridLayoutWidget.setObjectName("gridLayoutWidget")
    self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
    self.gridLayout.setContentsMargins(0, 0, 0, 0)
    self.gridLayout.setObjectName("gridLayout")
    # self.dockWidget = QtGui.QDockWidget(self.gridLayoutWidget)
    # self.dockWidget.setObjectName("dockWidget")
    # self.dockWidgetContents = QtGui.QWidget()
    # self.dockWidgetContents.setObjectName("dockWidgetContents")
    # self.dockWidget.setWidget(self.dockWidgetContents)
    # self.gridLayout.addWidget(self.dockWidget, 0, 0, 1, 1)


    self.leftList = QtGui.QListWidget(self.gridLayoutWidget)
    self.gridLayout.addWidget(self.leftList, 0, 0, 1, 1)
    self.middleList = QtGui.QListWidget(self.gridLayoutWidget)
    self.gridLayout.addWidget(self.middleList, 0, 1, 1, 1)
    self.rightList = QtGui.QListWidget(self.gridLayoutWidget)
    self.gridLayout.addWidget(self.rightList, 0, 2, 1, 1)

    self.progressBar = QtGui.QProgressBar(Dialog)
    self.progressBar.setGeometry(QtCore.QRect(10, 410, 231, 23))
    self.progressBar.setInputMethodHints(QtCore.Qt.ImhNone)
    self.progressBar.setMaximum(30)
    self.progressBar.setProperty("value", 30)
    self.progressBar.setInvertedAppearance(False)
    self.progressBar.setTextDirection(QtGui.QProgressBar.TopToBottom)
    self.progressBar.setObjectName("progressBar")
    self.label = QtGui.QLabel(Dialog)
    self.label.setGeometry(QtCore.QRect(240, 413, 51, 16))
    self.label.setObjectName("label")
    self.pushButton = QtGui.QPushButton(Dialog)
    self.pushButton.setGeometry(QtCore.QRect(10, 440, 291, 51))
    self.pushButton.setObjectName("pushButton")
    self.line = QtGui.QFrame(Dialog)
    self.line.setGeometry(QtCore.QRect(10, 390, 291, 20))
    self.line.setFrameShape(QtGui.QFrame.HLine)
    self.line.setFrameShadow(QtGui.QFrame.Sunken)
    self.line.setObjectName("line")

    self.retranslateUi(Dialog)
    QtCore.QMetaObject.connectSlotsByName(Dialog)

def retranslateUi(self, Dialog):
    Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
    self.progressBar.setFormat(QtGui.QApplication.translate("Dialog", "%vs", None, QtGui.QApplication.UnicodeUTF8))
    self.label.setText(QtGui.QApplication.translate("Dialog", "TimeOut", None, QtGui.QApplication.UnicodeUTF8))
    self.pushButton.setText(QtGui.QApplication.translate("Dialog", "Refresh", None, QtGui.QApplication.UnicodeUTF8))

如果要为列表中的每个项目添加按钮,可以使用

要使按钮向右对齐,请使用以下演示脚本中的布局:

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.list = QtGui.QListWidget(self)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.list)

    def addListItem(self, text):
        item = QtGui.QListWidgetItem(text)
        self.list.addItem(item)
        widget = QtGui.QWidget(self.list)
        button = QtGui.QToolButton(widget)
        layout = QtGui.QHBoxLayout(widget)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addStretch()
        layout.addWidget(button)
        self.list.setItemWidget(item, widget)
        button.clicked[()].connect(
            lambda: self.handleButtonClicked(item))

    def handleButtonClicked(self, item):
        print(item.text())

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    for label in 'red blue green yellow purple'.split():
        window.addListItem(label)
    window.setGeometry(500, 300, 300, 200)
    window.show()
    sys.exit(app.exec_())

如果要为列表中的每个项目添加按钮,可以使用

要使按钮向右对齐,请使用以下演示脚本中的布局:

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.list = QtGui.QListWidget(self)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.list)

    def addListItem(self, text):
        item = QtGui.QListWidgetItem(text)
        self.list.addItem(item)
        widget = QtGui.QWidget(self.list)
        button = QtGui.QToolButton(widget)
        layout = QtGui.QHBoxLayout(widget)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addStretch()
        layout.addWidget(button)
        self.list.setItemWidget(item, widget)
        button.clicked[()].connect(
            lambda: self.handleButtonClicked(item))

    def handleButtonClicked(self, item):
        print(item.text())

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    for label in 'red blue green yellow purple'.split():
        window.addListItem(label)
    window.setGeometry(500, 300, 300, 200)
    window.show()
    sys.exit(app.exec_())

您真的需要为每个列表项单独设置一个按钮吗?为什么不使用一个按钮复制当前/所选列表项?您好,您好。但是我想让用户只点击一次。这将迫使用户首先选择并输入,然后复制它。你让我觉得自己很蠢,这很明显。我会在文档中查看是否有一个“自动复制”的点击小部件项目。你真的需要一个单独的按钮为每个列表项目?为什么不使用一个按钮复制当前/所选列表项?您好,您好。但是我想让用户只点击一次。这将迫使用户首先选择并输入,然后复制它。你让我觉得自己很蠢,这很明显。我会在文件中查看是否有一个“自动复制”点击小部件项目。谢谢,它的工作。我会将它与列表中每个项目的上下文菜单结合起来!谢谢,它起作用了。我会将它与列表中每个项目的上下文菜单结合起来!