PYQT5 qlineedit 隐藏后不显示

Posted

技术标签:

【中文标题】PYQT5 qlineedit 隐藏后不显示【英文标题】:PYQT5 qlineedit doesn't show up after hiding it 【发布时间】:2019-12-11 11:21:09 【问题描述】:

考虑这个玩具示例。我想将 line_edit 添加到默认的 matplotlib 工具栏,但仅在执行特定操作后才对用户可见,这里是单击按钮。

单击按钮后 line_edit 不显示,但由于某种原因isVisible() 输出 True。如果 line_edit 默认可见并且我尝试使用 self.line_edit.hide() 隐藏它,则同样适用,它仍然可见但 isVisible() 返回 False。所以它不会自我刷新。

这到底是如何工作的?为什么 line_edit 仍然隐藏?有什么建议吗?

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QLineEdit, QVBoxLayout, QWidget, QPushButton
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT


class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Dummy')

        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar2QT(self.canvas, self)
        self.ax = self.figure.add_subplot(111)

        self.line_edit = QLineEdit(self)
        self.line_edit.setVisible(False)
        self.toolbar.addWidget(self.line_edit)

        self.btn = QPushButton('Show line', self)
        self.btn.clicked.connect(self.show_line_edit)

        layout = QVBoxLayout()
        layout.addWidget(self.toolbar)
        layout.addWidget(self.canvas)
        layout.addWidget(self.btn)
        self.setLayout(layout)

        self.show()

    def show_line_edit(self):
        self.line_edit.show()
        print("self.line_edit.isVisible(): ")
        print(self.line_edit.isVisible())
        self.line_edit.setFocus()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

【问题讨论】:

您没有将QLineEdit 添加到布局中。只是说。 @GiacomoAlzetta 我将它添加到工具栏,然后将工具栏添加到布局中。 【参考方案1】:

NavigationToolbar2QT继承自QtWidgets.QToolBar,并根据documentation of QToolBar

注意:您应该使用 QAction::setVisible() 来更改小部件的可见性。使用 QWidget::setVisible()、QWidget::show() 和 QWidget::hide() 不起作用。

所以,要解决这个问题,你可以做类似的事情

def initUI(self):

    ....

    self.line_edit = QLineEdit(self)
    self.line_edit.setVisible(False)
    self.line_action = self.toolbar.addWidget(self.line_edit)

    ....

def show_line_edit(self):
    self.line_action.setVisible(True)
    ....

【讨论】:

以上是关于PYQT5 qlineedit 隐藏后不显示的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 QLineEdit控件 实现拖入文件时自动显示文件路径

PyQt5 QLineEdit控件 实现拖入文件时自动显示文件路径

PyQt5 QLineEdit控件 实现拖入文件时自动显示文件路径

UIToolbar 隐藏后不显示

《PyQT5软件开发 - 控件篇》第3章 单行文本框QLineEdit

PyQT5 显示在窗口上花费的时间