我在照例子學習的過程中遇到了鍵盤事件無效的情況,比如
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 ...