从 Python 中的 QListWidgetItem 中单击项目调用函数
Call a Function with clicked Item from QListWidgetItem in Python
我正在使用 Qt-designer 和 PyQt。我用一些按钮和一个 QListWidget 设置了一个 Window。
我想获取 QListWidget 的点击项。
例如,我在列表中有 4 个项目,我单击第一个项目应该发送到另一个函数。
我读了一些例子,但他们总是使用 classes 和 "self"。因为我是一个新手,所以我想从简单开始,在没有 class.
的情况下设置所有内容
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_())
虽然建议使用 the new connection syntax:
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_())
我正在使用 Qt-designer 和 PyQt。我用一些按钮和一个 QListWidget 设置了一个 Window。
我想获取 QListWidget 的点击项。 例如,我在列表中有 4 个项目,我单击第一个项目应该发送到另一个函数。
我读了一些例子,但他们总是使用 classes 和 "self"。因为我是一个新手,所以我想从简单开始,在没有 class.
的情况下设置所有内容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_())
虽然建议使用 the new connection syntax:
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_())