Python Pyside2将键绑定到方法调用,而不是按钮或菜单
我试图将一个键直接绑定到一个方法调用。我已找到此解决方案,但它将密钥绑定到一个按钮: 当我尝试将其绑定到如下方法时:Python Pyside2将键绑定到方法调用,而不是按钮或菜单,python,pyside2,Python,Pyside2,我试图将一个键直接绑定到一个方法调用。我已找到此解决方案,但它将密钥绑定到一个按钮: 当我尝试将其绑定到如下方法时: qtwidts.QShortcut(QtGui.QKeySequence(QtCore.Qt.LeftArrow),self.my_函数) 将抛出错误: TypeError: 'PySide2.QtWidgets.QShortcut' called with wrong argument types: PySide2.QtWidgets.QShortcut(QKeySeq
qtwidts.QShortcut(QtGui.QKeySequence(QtCore.Qt.LeftArrow),self.my_函数)
将抛出错误:
TypeError: 'PySide2.QtWidgets.QShortcut' called with wrong argument types:
PySide2.QtWidgets.QShortcut(QKeySequence, method)
Supported signatures: ......
代码示例:
from PySide2 import QtCore, QtWidgets, QtUiTools, QtGui
import sys
class mainW(QtCore.QObject):
def __init__(self):
super(mainW, self).__init__()
self.init_ui()
self.init_connections()
self.ui.show()
def init_ui(self):
file = QtCore.QFile("ressource_files/energiebericht_pruefung_main.ui")
file.open(QtCore.QFile.ReadOnly)
loader = QtUiTools.QUiLoader()
self.ui = loader.load(file)
def init_connections(self):
QtWidgets.QShortcut(QtGui.QKeySequence(QtCore.Qt.LeftArrow), self.my_function)
def my_function(self):
print('* MY FUNCTION HAS BEEN CALLED *')
# MAIN
app = QtWidgets.QApplication(sys.argv)
w = mainW()
sys.exit(app.exec_())
对应的ui文件:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1394</width>
<height>726</height>
</rect>
</property>
<property name="windowTitle">
<string>Energiebericht Prüfung</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="maximumSize">
<size>
<width>200</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Infrastrukturelement</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QListWidget" name="lwISE"/>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QGroupBox" name="groupBox_2">
<property name="maximumSize">
<size>
<width>200</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Profil</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QListWidget" name="lwProfil"/>
</item>
</layout>
</widget>
</item>
<item row="0" column="2">
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Chart</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QStackedWidget" name="stackedWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="gfx1"/>
<widget class="QWidget" name="gfx2"/>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QTableWidget" name="tW">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>140</height>
</size>
</property>
<property name="rowCount">
<number>3</number>
</property>
<property name="columnCount">
<number>13</number>
</property>
<row/>
<row/>
<row/>
<column/>
<column/>
<column/>
<column/>
<column/>
<column/>
<column/>
<column/>
<column/>
<column/>
<column/>
<column/>
<column/>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1394</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
主窗口
0
0
1394
726
普锐丰能源
200
16777215
基础结构元素
200
16777215
Profil
图表
0
16777215
140
3.
13
0
0
1394
21
qshort与QWidget关联,因此它会抛出该错误,您还必须在QKeySequence中使用“left”,因为QKeySequence不单独支持Qt::Key,而是支持修饰符
导入操作系统
导入系统
从PySide2导入QtCore、QtWidgets、QtUiTools、QtGui
CURRENT_DIR=os.path.dirname(os.path.realpath(uu文件_uu))
类mainW(QtCore.QObject):
定义初始化(自):
超级(mainW,self)。\uuuu init\uuuuu()
self.init_ui()
self.init_connections()
self.ui.show()
def初始用户界面(自身):
filename=os.path.join(
当前目录,“ressource\u文件/energiebericht\u pruefung\u main.ui”
)
file=QtCore.QFile(文件名)
如果不是file.open(QtCore.QFile.ReadOnly):
系统出口(-1)
loader=qtutools.QUiLoader()
self.ui=loader.load(文件)
def初始连接(自):
qtwidts.QShortcut(QtGui.QKeySequence(“左”)、self.ui、self.my_函数)
@QtCore.Slot()
def my_功能(自我):
打印(“*我的函数已被调用*”)
如果名称=“\uuuuu main\uuuuuuuu”:
app=qtwidts.QApplication(sys.argv)
w=mainW()
sys.exit(app.exec_())
谢谢,所以原则上每次我需要绑定其他东西,而不是小部件时,我都可以用@QtCore.Slot()来装饰它@Fab它不是必需的,但很方便,并且只有当您链接它的对象是QObject(或继承自QWidget之类的QObject)时,您才能这样做