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)时,您才能这样做