Запретить переключение вкладок по умолчанию с помощью Ctrl+Tab с помощью QTabWidget
У меня есть следующий пример кода, который делает макет с тремя вкладками (с кнопками на третьей вкладке). По умолчанию я могу использовать Ctrl+Tab/Ctrl+Shift+Tab для переключения между вкладками. Как отключить эту функцию? В моем коде, не являющемся примером, это нежелательное поведение.
from PyQt4 import QtGui
import sys
def main():
app = QtGui.QApplication(sys.argv)
tabs = QtGui.QTabWidget()
push_button1 = QtGui.QPushButton("QPushButton 1")
push_button2 = QtGui.QPushButton("QPushButton 2")
tab1 = QtGui.QWidget()
tab2 = QtGui.QWidget()
tab3 = QtGui.QWidget()
vBoxlayout = QtGui.QVBoxLayout()
vBoxlayout.addWidget(push_button1)
vBoxlayout.addWidget(push_button2)
tabs.resize(250, 150)
tabs.move(300, 300)
tab3.setLayout(vBoxlayout)
tabs.addTab(tab1, "Tab 1")
tabs.addTab(tab2, "Tab 2")
tabs.addTab(tab3, "Tab 3")
tabs.setWindowTitle('PyQt QTabWidget Add Tabs and Widgets Inside Tab')
tabs.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
1 ответ
Решение
Вы всегда можете установить eventFilter
(похоже на KeyPressEater здесь)
Здесь я сделал это:
from PySide import QtGui, QtCore
class AltTabPressEater(QtCore.QObject):
def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.KeyPress and (event.key() == 16777217 or event.key() == 16777218):
return True # eat alt+tab or alt+shift+tab key
else:
# standard event processing
return QtCore.QObject.eventFilter(self, obj, event)
app = QtGui.QApplication([])
tabs = QtGui.QTabWidget()
filter = AltTabPressEater()
tabs.installEventFilter(filter)
push_button1 = QtGui.QPushButton("QPushButton 1")
push_button2 = QtGui.QPushButton("QPushButton 2")
tab1 = QtGui.QWidget()
tab2 = QtGui.QWidget()
tab3 = QtGui.QWidget()
vBoxlayout = QtGui.QVBoxLayout()
vBoxlayout.addWidget(push_button1)
vBoxlayout.addWidget(push_button2)
tabs.resize(250, 150)
tabs.move(300, 300)
tab3.setLayout(vBoxlayout)
tabs.addTab(tab1, "Tab 1")
tabs.addTab(tab2, "Tab 2")
tabs.addTab(tab3, "Tab 3")
tabs.show()
app.exec_()
Мне было лень найти подходящее QtCore.Qt
константы для клавиш alt+tab или alt+shift+tab, поэтому я просто сначала прослушал, а затем заменил тем, что сказал мне python.