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控件 实现拖入文件时自动显示文件路径