繁体   English   中英

使用 Python 中 QListWidgetItem 中单击的项调用函数

[英]Call a Function with clicked Item from QListWidgetItem in Python

我正在使用 Qt-designer 和 PyQt。 我设置了一个带有一些按钮和 QListWidget 的窗口。

我想获得 QListWidget 的点击项。 例如,我在列表中有 4 个项目,我单击第一个项目应该发送到另一个功能。

我读了一些例子,但他们总是使用类和“自我”。 由于我是一个完全新手,我想从简单开始,在没有课程的情况下设置所有内容。

def show_item(item):
    print (item)

mainscreen.connect(mainscreen.myList, SIGNAL("itemClicked(QListWidgetItem*)"),QListWidgetItem, showItem(QListWidgetItem))

我并不真正理解这些错误,因为我认为所有要求都已满足。

TypeError: arguments did not match any overloaded call:
  QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'PyQt4.QtCore.pyqtWrapperType'
  QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 4 has unexpected type 'str'
  QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'PyQt4.QtCore.pyqtWrapperType'

编辑:代码示例

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.uic import 

def show_item(item):
    print (item)



for x in range(4):
    mainscreen.mylist_sorted.addItem(x)

app = QApplication(sys.argv)
mainscreen = loadUi("mainscreen.ui")
mainscreen.connect(mainscreen.mylist_sorted, SIGNAL("itemClicked(QListWidgetItem*)"),QListWidgetItem, (showItem(QListWidgetItem)))
mainscreen.show()
sys.exit(app.exec_())

mainscreen.ui 文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>mainscreen</class>
 <widget class="QMainWindow" name="mainscreen">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QListWidget" name="mylist_sorted">
    <property name="geometry">
     <rect>
      <x>30</x>
      <y>160</y>
      <width>256</width>
      <height>192</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>25</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

您的代码有以下错误:

  • QListWidget 的名称是 mylist_sorted,而不是您使用的 mylist。

  • 如果要连接函数,则必须使用第二个签名: QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection)其中第三个参数是函数。

  • 函数名是show_item,不是showItem。 这是同类型的第二个错误,也就是变量名。 在 Python 中,使用的名称与声明的名称相同非常重要。

考虑到上述解决方案是:

import sys
from PyQt4.QtCore import SIGNAL
from PyQt4.QtGui import QApplication, QListWidgetItem
from PyQt4.uic import loadUi


def show_item(item):
    print(item)


if __name__ == "__main__":

    app = QApplication(sys.argv)
    mainscreen = loadUi("mainscreen.ui")
    for x in range(4):
        mainscreen.mylist_sorted.addItem(str(x))

    mainscreen.connect(
        mainscreen.mylist_sorted,
        SIGNAL("itemClicked(QListWidgetItem*)"),
        show_item,
    )
    mainscreen.show()
    sys.exit(app.exec_())

虽然建议使用新的连接语法

import sys
from PyQt4.QtCore import SIGNAL
from PyQt4.QtGui import QApplication, QListWidgetItem
from PyQt4.uic import loadUi


def show_item(item):
    print(item)


if __name__ == "__main__":

    app = QApplication(sys.argv)
    mainscreen = loadUi("mainscreen.ui")
    for x in range(4):
        mainscreen.mylist_sorted.addItem(str(x))

    mainscreen.mylist_sorted.itemClicked.connect(show_item)
    mainscreen.show()
    sys.exit(app.exec_())

暂无
暂无

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

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