Pyqt5 почему не работает show()
Вот события keyPressEvent(). Если мы нажимаем клавишу Esc, то приложение hide().
А теперь я хочу нажать alt и чтобы оно show(), но оно не работает. Помогите
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Event handler')
self.show()
def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape:
self.hide()
elif e.key() == Qt.Key_Alt:
self.show()
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Key eventsотправляются в виджетс фокусом вводас клавиатуры при нажатии или отпускании клавиш.https://doc.qt.io/qt-5/qkeyevent.html#details
Внимание! - с фокусом ввода !
Вставьте какой-нибудь print('QtCore.Qt.Key_Alt') и нажимайте alt
Вы видите работу принта.
Теперь сверните выше окно и нажимайте alt.
Ничего не происходит, т.к. приложение не в фокусе.
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Event handler')
self.show()
def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape:
self.hide()
elif e.key() == Qt.Key_Alt:
print('QtCore.Qt.Key_Alt') # +++
self.show()
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Update
То что вы задумали, может быть реализовано с дочерним виджетом, например так см. пример 2. При этом если главное окно в фокусе.
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication, QLabel
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Event handler')
self.label = QLabel('Hello World', self) # +++
self.label.move(100, 50) # +++
def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape:
self.label.hide() # self.label
elif e.key() == Qt.Key_Alt:
print('QtCore.Qt.Key_Alt')
self.label.show() # self.label
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
