首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在PyQt5 python中的拆分器控制柄上创建右键单击菜单

在PyQt5 python中的拆分器控制柄上创建右键单击菜单
EN

Stack Overflow用户
提问于 2020-10-08 15:01:34
回答 1查看 129关注 0票数 1

我做了一个分割器。我一直在尝试在右键单击拆分器手柄时显示右键菜单。

下面是我创建的代码。目前,它无法识别拆分器手柄上的右键单击。(注意:此代码当前更新计数,如果在拆分器i,e左上角的第一帧中单击鼠标右键)

代码语言:javascript
代码运行次数:0
运行
复制
from PyQt5.QtWidgets import *
from PyQt5 import QtGui
from PyQt5.QtCore import Qt


# This class is to create the outer window

class OuterLayout(QMainWindow):
    def __init__(self):
        super().__init__()
        self.window()

    def window(self):
        self.setMinimumSize(1000, 900)
        self.showMaximized()
        self.setWindowIcon(QtGui.QIcon('Images/Logo_small.png'))
        self.setWindowTitle('Splitter')
        self.menu_bar()

        inner_layout = SplitterLayout()
        layout = inner_layout.add_layout()

        self.setCentralWidget(layout)


    def menu_bar(self):
        menu_bar = self.menuBar()

        file_menu = menu_bar.addMenu('File')
        self.file(file_menu)

        edit_menu = menu_bar.addMenu('Edit')
        self.edit(edit_menu)

    def file(self, file):

        new = QAction('New', self)

        file.addAction(new)

    def edit(self, edit):
        pass


# This class creates the splitter window
class SplitterLayout(QWidget):

    def __init__(self):
        super(QWidget, self).__init__()
        self.count = 0
        self.splitter_handle_width = 3 # This is to set the width of the handle

    # This is a method to add a new splitter window
    def add_layout(self):

        left = QFrame()
        left.setFrameShape(QFrame.StyledPanel)

        bottom = QFrame()
        bottom.setFrameShape(QFrame.StyledPanel)

        splitter1 = QSplitter(Qt.Horizontal)
        splitter1.setHandleWidth(self.splitter_handle_width)

        lineedit = QLineEdit()
        lineedit.setStyleSheet('background-color:green')

        splitter1.addWidget(left)
        splitter1.addWidget(lineedit)
        splitter1.setSizes([200, 200])
        print(splitter1.handle(3))

        splitter1.mousePressEvent = self.splitter_clicked

        splitter2 = QSplitter(Qt.Vertical)
        splitter2.setHandleWidth(self.splitter_handle_width)

        splitter2.addWidget(splitter1)
        splitter2.addWidget(bottom)

        return splitter2

    def splitter_clicked(self, event):
        self.count += 1
        print('splitter_double clicked' + str(self.count))

    # def mousePressEvent(self, event):
    #     if event.button == Qt.RightButton:
    #         print('Right mouse clicked')
    #
    #     elif event.button == Qt.LeftButton:
    #         print('Left mouse clicked')


def main():
    splitter = QApplication([])

    outer_layout = OuterLayout()
    outer_layout.show()

    splitter.exec_()


if __name__ == '__main__':
    main()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 19:18:10

这里的技巧是创建一个自定义QSplitterHandle类并覆盖QSplitterHandle.mousePressEvent和一个自定义QSplitter类,在这个类中覆盖createHandle,以便它返回自定义QSplitterHandle而不是标准QSplitterHandle

代码语言:javascript
代码运行次数:0
运行
复制
class MySplitter(QSplitter):
    def createHandle(self):
        return MySplitterHandle(self.orientation(), self)


class MySplitterHandle(QSplitterHandle):
    def mousePressEvent(self, event):
        if event.button() == Qt.RightButton:
            print('Right mouse clicked')

        elif event.button() == Qt.LeftButton:
            print('Left mouse clicked')

        super().mousePressEvent(event)

最后,要使用自定义QSplitter,您需要在SplitterLayout中将所有出现的QSplitter替换为MySplitter

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64257335

复制
相关文章

相似问题

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