我正在使用 Pyside6
我想更改小部件根據用戶的鍵盤輸入顯示的內容。
最有用的示例只是一個顯示 1-5 的標簽,具體取決于用戶按下的數字鍵。
我的嘗試(什么都沒有列印出來,所以我想這永遠不會被呼叫,我必須將它附加到某些東西上):
def keyPressEvent(self, event):
key = event.key()
print(f"Found key {key}")
if key == QtCore.Qt.Key_1:
self.selected_bin = 1
self.set_current_bin()
elif key == QtCore.Qt.Key_2:
self.selected_bin = 2
self.set_current_bin()
elif key == QtCore.Qt.Key_3:
self.selected_bin = 3
self.set_current_bin()
elif key == QtCore.Qt.Key_4:
self.selected_bin = 4
self.set_current_bin()
elif key == QtCore.Qt.Key_5:
self.selected_bin = 5
self.set_current_bin()
else:
super(self).keyPressEvent(event)
def set_current_bin(self):
self.ui.current_bin.setText(f"Current bin: {self.selected_bin}")
我覺得這超級簡單,但是我搜索了大約半個小時,沒有運氣。
uj5u.com熱心網友回復:
安裝一個監聽按鍵的事件過濾器,然后將標簽文本設定為事件的鍵文本值。
這是一個作業示例:
from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *
class Window(QWidget):
def __init__(self, parent=None):
super().__init__(parent=parent)
self.layout = QHBoxLayout(self)
self.label1 = QLabel("", self)
self.label2 = QLabel("Key Pressed: ", self)
self.layout.addWidget(self.label2)
self.layout.addWidget(self.label1)
self.resize(100,50)
self.eventFilter = KeyPressFilter(parent=self)
self.installEventFilter(self.eventFilter)
class KeyPressFilter(QObject):
def eventFilter(self, widget, event):
if event.type() == QEvent.KeyPress:
text = event.text()
if event.modifiers():
text = event.keyCombination().key().name.decode(encoding="utf-8")
widget.label1.setText(text)
return False
if __name__ == '__main__':
app = QApplication([])
window = Window()
window.show()
app.exec()
uj5u.com熱心網友回復:
您的示例在 PySide2 中運行良好,除了必須更改
super(self).keyPressEvent(event)
至
super().keyPressEvent(event)
在你的 else 塊中。
這是我在 PySide6 上測驗的測驗,以查看版本是否存在問題:
from PySide2 import QtCore, QtWidgets
class TestWidget(QtWidgets.QLabel):
def keyPressEvent(self, event):
key = event.key()
print(f"Found key {key}")
if key == QtCore.Qt.Key_1:
self.selected_bin = 1
self.set_current_bin()
elif key == QtCore.Qt.Key_2:
self.selected_bin = 2
self.set_current_bin()
elif key == QtCore.Qt.Key_3:
self.selected_bin = 3
self.set_current_bin()
elif key == QtCore.Qt.Key_4:
self.selected_bin = 4
self.set_current_bin()
elif key == QtCore.Qt.Key_5:
self.selected_bin = 5
self.set_current_bin()
else:
super().keyPressEvent(event)
def set_current_bin(self):
self.setText(f"Current bin: {self.selected_bin}")
if __name__ == '__main__':
import sys
args = sys.argv
app = QtWidgets.QApplication(args)
w = TestWidget("Testing")
w.show()
sys.exit(app.exec_())
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/514826.html
