首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使QCombobox隐藏弹出式窗口并保持焦点,当窗口将逃逸按钮作为快捷键时

如何使QCombobox隐藏弹出式窗口并保持焦点,当窗口将逃逸按钮作为快捷键时
EN

Stack Overflow用户
提问于 2022-11-04 04:04:37
回答 1查看 36关注 0票数 2

我有一个使用Pyside2创建的表单。

我有一个QCombobox,它的形式也有一个QToolbutton。如果触发,QToolbutton具有使用Escape键关闭窗口的快捷方式。

当我的组合框显示它的弹出并按Escape键时,表单也关闭了。

我想要的是当Combobox弹出显示并按Escape时,它只隐藏弹出窗口,而不是关闭窗口。

我怎么能这么做?

下面是代码的示例:

代码语言:javascript
代码运行次数:0
运行
复制
import sys
from PySide2.QtCore import Qt
from PySide2.QtGui import QKeySequence
from PySide2.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QComboBox, QToolButton, QShortcut

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        layout = QVBoxLayout()
        toolbutton = QToolButton()
        toolbutton.setText("Press Esc to close window")
        toolbutton.setShortcut(QKeySequence(Qt.Key_Escape))
        toolbutton.clicked.connect(self.close)
        combobox = QComboBox()
        combobox.addItems("A")
        combobox.addItems("B")
        combobox.addItems("C")

        layout.addWidget(toolbutton)
        layout.addWidget(combobox)

        w = QWidget()
        w.setLayout(layout)

        self.setCentralWidget(w)
        self.show()

app = QApplication(sys.argv)
window = MainWindow()
app.exec_()
EN

回答 1

Stack Overflow用户

发布于 2022-11-04 12:44:18

不要为此使用快捷方式,因为它的激活优先级太高。只有在没有其他小部件想要的情况下,窗口才必须接收事件。QDialog会自动处理这个问题,但是如果不能使用,一个简单的解决方案就是覆盖窗口的keyPressEvent

下面是一个基于您的示例的演示:

代码语言:javascript
代码运行次数:0
运行
复制
import sys
from PySide2.QtCore import Qt
from PySide2.QtGui import QKeySequence
from PySide2.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QComboBox, QToolButton, QShortcut

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        layout = QVBoxLayout()
        # DO NOT SET A SHORTCUT ON THIS BUTTON
        toolbutton = QToolButton()
        toolbutton.setText("Press Esc to close window")
        toolbutton.clicked.connect(self.close)
        combobox = QComboBox()
        combobox.addItem("A")
        combobox.addItem("B")
        combobox.addItem("C")

        layout.addWidget(toolbutton)
        layout.addWidget(combobox)

        w = QWidget()
        w.setLayout(layout)

        self.setCentralWidget(w)
        self.show()

    def keyPressEvent(self, event):
        # handle escape/cancel key
        if event.matches(QKeySequence.Cancel):
            self.close()

app = QApplication(sys.argv)
window = MainWindow()
app.exec_()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74312047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档