【问题标题】:PyQT QListWidgetItem specific item launch specific functionPyQT QListWidgetItem 特定项目启动特定功能
【发布时间】:2016-10-24 05:39:56
【问题描述】:

使用 QTDesigner 我制作了一个包含三个项目的简单 QListWidge

苹果

香蕉

橙色

My Goal, when one of those options is selected it launches a specific function.出于某种原因,我无法弄清楚这一点,并且在 Google 搜索中找不到任何内容。我是 pyQT 的新手,所以也许我只是使用了不正确的术语。

使用 QT Designer 我可以设置 SIGNAL 和 SLOT,但效果是针对 QListWidget 中的每一项,并不具体。

这是我关心的代码

QtCore.QObject.connect(self.listWidget, QtCore.SIGNAL(_fromUtf8("itemClicked(QListWidgetItem*)")), MainWindow.close)

That code is closing the main window when any QListWidgetItem is selected.我希望它仅在选择“苹果”时关闭。我想让 Banana 和 Orange 做点别的事情。

似乎我在网上找到的所有示例都没有解决如果您希望项目 A 与项目 B 做某事。他们都只是使用一个通用示例,其中所有项目都做同样的事情。

    # -*- coding: utf-8 -*-

    # Form implementation generated from reading ui file 'untitled.ui'
    #
    # Created by: PyQt4 UI code generator 4.11.4
    #
    # WARNING! All changes made in this file will be lost!

    from PyQt4 import QtCore, QtGuii

    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s

    try:
        _encoding = QtGui.QApplication.UnicodeUTF8
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig)

    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName(_fromUtf8("MainWindow"))
            MainWindow.resize(800, 600)
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
            self.listWidget = QtGui.QListWidget(self.centralwidget)
            self.listWidget.setGeometry(QtCore.QRect(50, 60, 256, 241))
            self.listWidget.setObjectName(_fromUtf8("listWidget"))
            item = QtGui.QListWidgetItem()
            self.listWidget.addItem(item)
            item = QtGui.QListWidgetItem()
            self.listWidget.addItem(item)
            item = QtGui.QListWidgetItem()
            self.listWidget.addItem(item)
            MainWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtGui.QMenuBar(MainWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
            self.menubar.setObjectName(_fromUtf8("menubar"))
            MainWindow.setMenuBar(self.menubar)
            self.statusbar = QtGui.QStatusBar(MainWindow)
            self.statusbar.setObjectName(_fromUtf8("statusbar"))
            MainWindow.setStatusBar(self.statusbar)

            self.retranslateUi(MainWindow)
            QtCore.QObject.connect(self.listWidget, QtCore.SIGNAL(_fromUtf8("itemClicked(QListWidgetItem*)")), MainWindow.close)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)

        def retranslateUi(self, MainWindow):
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
            __sortingEnabled = self.listWidget.isSortingEnabled()
            self.listWidget.setSortingEnabled(False)
            item = self.listWidget.item(0)
            item.setText(_translate("MainWindow", "apple", None))
            item = self.listWidget.item(1)
            item.setText(_translate("MainWindow", "banana", None))
            item = self.listWidget.item(2)
            item.setText(_translate("MainWindow", "orange", None))
            self.listWidget.setSortingEnabled(__sortingEnabled)


    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())

【问题讨论】:

    标签: qt pyqt4 qt-designer


    【解决方案1】:

    能够使用下面的网站和一些浮动的示例脚本来拼凑解决方案。他们解决方案的关键是 .item

    .item(0) is reviewing what is currently set at index 0. The website below showed that I could attach a .isSelected() that would return True when a list item is selected.

    有了这两条信息,我现在可以在选择特定项目时采取特定操作。

    http://doc.qt.io/qt-4.8/qlistwidgetitem.html#isSelected

     QtCore.QObject.connect(self.listWidget,    QtCore.SIGNAL(_fromUtf8("itemClicked(QListWidgetItem*)")), self.closewindow)
    
     def closewindow(self):
       apple = self.listWidget.item(0).isSelected()
       banana = self.listWidget.item(1).isSelected()
    
       if apple == True:
         self.exitprogram()
       elif banana == True:
         print 'Banana selected'
    
     def exitprogram(self):
       sys.exit()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      相关资源
      最近更新 更多