如何阻止我的GUI中的每三个QLineEdit中断?

时间:2019-06-06 12:37:17

标签: pyqt5 qlineedit

我目前正在使用PyQt5和Python 3.7制作类似计算器的GUI,并且遇到了一个问题,即每个计算器选项卡下的每三个QLineEdit都拒绝与之交互。而且,我用来标记每三个QLineEdits的自定义标签对象也拒绝显示其工具提示。所有其他QLineEdits都是可编辑的,所有其他Labels均按预期显示其工具提示,只是每三行中断。

我解决该问题的尝试相对有限,因为我看不出任何原因,为什么每个第三个QLineEdit都会这样做而不是全部替换。我唯一想到的就是使用text_box.setReadOnly(False),但这没有任何效果。

以下是充当输入的容器小部件的类:

class Component(QtWidgets.QWidget):
    def __init__(self, link_component, omit_fields = []):
        super().__init__()
        self.l = QtWidgets.QGridLayout()
        self.setLayout(self.l)

        self.link_component = type(link_component)
        self.field_dict = {}
        self.label_dict = {}

        # Iterate over fields
        for field_idx, field in enumerate([f for f in vars(link_component) if not f.startswith('__')]):
            # Add text box and label
            text_box = QtWidgets.QLineEdit(str(getattr(link_component, field)))
            text_box.setMaximumSize(config["gui"]["text_box_width"], config["gui"]["text_box_height"])
            text_box.setReadOnly(False)
            self.l.addWidget(text_box, field_idx, 0)
            label = Label(config["gui"]["component_labels"][type(link_component).__name__][str(field)])
            self.l.addWidget(label, field_idx, 1)
            self.field_dict[str(field)] = text_box
            self.label_dict[str(field)] = label

        # add spacer widget
        self.l.addWidget(QtWidgets.QWidget(), 2, 0, 1, 10)
        self.l.addWidget(QtWidgets.QWidget(), 0, len(self.field_dict), 10, 1)

这是我用来生成包含每个“组件”对象的选项卡的代码:

        for idx, (name, c) in enumerate(self.components.items()):
            component_title = config["gui"]["component_labels"][c.link_component.__name__]["title"]

            for (field_name, field) in c.field_dict.items():
                field.returnPressed.connect(self.analysis_button.click)  # Enter clicks the analysis button

            for (label_name, label) in c.label_dict.items():
                label.setToolTip(config["gui"]["component_labels"][c.link_component.__name__]["tooltips"][label_name])

            self.component_tabs.addTab(c, component_title)
            self.component_tabs.setTabToolTip(idx, config["gui"]["component_labels"][c.link_component.__name__]
                                              ["component_tooltip"])

这是我的自定义标签类(我需要它才能使工具提示在出现之前立即起作用):

class Label(QtWidgets.QLabel):
    def __init__(self, *args, **kwargs):
        super(Label, self).__init__(*args, **kwargs)
        self.setMouseTracking(True)

    def enterEvent(self, event):
        QtWidgets.QToolTip.showText(
            self.mapToGlobal(event.pos()), self.toolTip()
        )
        super(Label, self).enterEvent(event)

就我的技能水平而言,我没有理由知道为什么每三个QLineEdit和Label都会被锁定。它们都应该是可编辑的,并且其余部分也都可以正常显示其工具提示,但是幕后发生了一些我无法理解的事情。

0 个答案:

没有答案