PySide2中鍵盤事件無效的原因及解決方法

2021-10-06 07:50:21 字數 3384 閱讀 5980

我在照例子學習的過程中遇到了鍵盤事件無效的情況,比如

from pyside2.qtwidgets import

*from pyside2.qtcore import qt

class

example

(qwidget)

:def

__init__

(self)

: self.initui(

)def

initui

(self)

: self.window = qmainwindow(

) self.window.resize(

200,

100)

self.window.setwindowtitle(

'視窗'

) self.textedit = qlineedit(self.window)

self.textedit.setplaceholdertext(

"按回車試試"

) self.textedit.move(50,

30)self.window.show(

)# 這裡定義了鍵盤監聽事件,然並卵,根本沒有執行

defkeypressevent

(self, event)

:if event.key(

)== qt.key_return:

print

('按下回車'

)if __name__ ==

'__main__':)

window = example(

))

通過排查發現,keypressevent只監聽主窗體,你要是在上面加個輸入框之類的,它就不鳥你了。肯定可以把這個函式和控制項結合起來,只不過我還不會。

qlineedit自帶了乙個訊號returnpressed

**可以改為:

from pyside2.qtwidgets import

*from pyside2.qtcore import qt

class

example

(qwidget)

:def

__init__

(self)

: self.initui(

)# 用returnpressed訊號來監聽

self.textedit.returnpressed.connect(self.keypress)

definitui

(self)

: self.window = qmainwindow(

) self.window.resize(

200,

150)

self.window.setwindowtitle(

'視窗'

) self.textedit = qlineedit(self.window)

self.textedit.setplaceholdertext(

"按回車試試"

) self.textedit.move(50,

30)self.textedit2 = qlineedit(self.window)

self.textedit2.setplaceholdertext(

"按回車試試"

) self.textedit2.move(50,

70)self.window.show(

)def

keypress

(self)

:print

('你按了一下回車'

)if __name__ ==

'__main__':)

window = example(

))

事件過濾器似乎值得好好研究一下,目前我知道的用法是現在控制項上installeventfilter,然後在下面寫個eventfilter(self, widget, event)函式

from pyside2.qtwidgets import

*from pyside2.qtcore import qt, qevent

class

example

(qwidget)

:def

__init__

(self)

:super

(example, self)

.__init__(

)# 這裡要這麼寫,我也不知道為什麼

self.initui(

) self.textedit.installeventfilter(self)

# 相當於繫結了事件過濾器

definitui

(self)

: self.window = qmainwindow(

) self.window.resize(

200,

150)

self.window.setwindowtitle(

'視窗'

) self.textedit = qlineedit(self.window)

self.textedit.setplaceholdertext(

"按回車試試"

) self.textedit.move(50,

30)self.textedit2 = qlineedit(self.window)

self.textedit2.setplaceholdertext(

"按回車試試"

) self.textedit2.move(50,

70)self.window.show(

)def

eventfilter

(self, widget, event)

:# 定義事件過濾器

if event.

type()

== qevent.keypress:

# 先判斷事件型別是否是鍵盤事件

if event.key(

)== qt.key_return:

# 再判斷是否是回車

print

('你按了一下回車'

)# 這裡要return,要不然會報錯

return qwidget.eventfilter(self, widget, event)

if __name__ ==

'__main__':)

window = example(

))

pyside2設計GUI的發布

關於選擇pyside2的原因,裡有詳細說明,也可以參考對應的bilibili鏈結。發布程式需要的pyinstaller pip install pyinstallerpyinstaller f py noconsole hidden import pyside2.qtxml生成三個資料夾和乙個 sp...

PySide2 去掉 Dialog 的問號

建立出來的 dialog 有乙個問號,但是不想要。去掉方法 self.setwindowflags self.windowflags qt.windowcontexthelpbuttonhint self 就是 qinputdialog 這個類。完整 如下,可直接執行 import sys from...

PySide2 配置檔案ini的操作

from pyside2.qtcore import qsettings 寫配置 注意 節點 和 鍵 最好不要寫中文,讀寫正常,但是記事本看到的是被轉碼的中文,值 可以中文,setinicodec utf 8 後正常顯示。研究了乙個下午節點和鍵還是解決不了 劉倍榮 jie jian 可中文 ini ...