gpt4 book ai didi

python - 在 QLineEdit 中拦截 contextMenuEvent() 时出现 __init_subclass__ 错误

转载 作者:行者123 更新时间:2023-12-01 00:39:59 25 4
gpt4 key购买 nike

我正在测试一些 pyqt 小部件及其方法,但当我创建一个继承 QLineEdit 类的子类以便在单击鼠标右键时创建上下文菜单时,我一直遇到问题。此类将主窗口作为父窗口。

运行此代码会产生以下输出:

TypeError: __init_subclass__() takes no keyword arguments

我尝试添加 **kwargs 作为 __ init_subclass__ 方法的参数,但实际上我不知道它的意义是什么。

这是一些代码:

from PyQt5 import QtWidgets, QtCore, QtGui
import sys

class Window(QtWidgets.QWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)

self.resize(300, 120)
self.setWindowTitle('Testing')

self.edit = QtWidgets.QLineEdit()
self.edit.createStandardContextMenu()

self.box = QtWidgets.QVBoxLayout(self)
self.box.addWidget(self.edit)

class ConetextMenu(QtWidgets.QLineEdit, parent = Window):
def __init_subclass__(self, parent = Window, **kwargs):
QtWidgets.QLineEdit.__init_subclass__(**kwargs)

def contextMenuEvent(self, ev):
pass

if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())

我希望能够为 QLineEdit 创建自定义上下文菜单并使用子类处理此问题。

如有任何帮助,我们将不胜感激。

最佳答案

没有必要使用 __init_subclass__ 来继承 QLineEdit,您还可以尝试以 Window 作为父级,但这是不可能的,因为 QLineEdit 父级必须是 QWidget 对象,而不是 QWidget 类。

以下是您应该如何执行此操作的示例:

import sys
from PyQt5 import QtWidgets, QtCore, QtGui


class LineEdit(QtWidgets.QLineEdit):
def contextMenuEvent(self, event):
menu = self.createStandardContextMenu()
menu.addSeparator()
foo_action = menu.addAction("Foo")
action = menu.exec_(self.mapToGlobal(event.pos()))
if action == foo_action:
print("foo")


class Window(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)

self.resize(300, 120)
self.setWindowTitle("Testing")

self.edit = LineEdit()

box = QtWidgets.QVBoxLayout(self)
box.addWidget(self.edit)


if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())

关于python - 在 QLineEdit 中拦截 contextMenuEvent() 时出现 __init_subclass__ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57428028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com