QFormLayout的PyQt5顶行没有响应鼠标点击
Posted
技术标签:
【中文标题】QFormLayout的PyQt5顶行没有响应鼠标点击【英文标题】:PyQt5 top row of QFormLayout not responding to mouse click 【发布时间】:2022-01-15 16:51:47 【问题描述】:将 QtDesigner 和 PyQt5 与 pyuic5 一起使用,我正在设置具有可变行数的 FormLayout。 每行都是在 QtDesigner 中创建的自定义小部件,由 QLabel 和包含 QLineEdit 和 QPushButton 的 QHBoxLayout 组成。
我使用
创建行用户界面 def get_data_widget(parent=None, **kwargs):
widget = QtWidgets.QWidget(parent)
dlg_ui = wgtDataRow.Ui_Form() # from the custom made widget
dlg_ui.setupUi(widget)
# recursively ensure all objectName()s are unique
rename_widget(widget, "_%s" % unique_id())
dlg_ui.label.setText(kwargs.get('name') or '')
dlg_ui.editData.setText(kwargs.get('value') or '')
return dlg_ui
在 QDialog 方法中将行 UI 插入到 QFormLayout 中:
def add_data_entry_row(self, name, **kwargs):
# simplified code, but this is the bit that affects the QFormLayout
posn = kwargs.get('position', 0)
data_ui = get_data_widget(self, name=name, value=kwargs.get('value'))
self.dlg_ui.formLayout.insertRow(posn, data_ui.label, data_ui.widget)
我遇到的问题是 QFormLayout 的第一行没有响应鼠标点击。
如果我在 0 处插入新行,则先前无响应的行将向下移动并变为响应,而新的(顶部)行无响应。
任何人都可以对此有所了解吗?
【问题讨论】:
好吧,越来越好奇了。如果我展开包含对话框,在短暂的时间间隔后,顶行 QPushButton 会响应鼠标单击,但 QLineEdit 仍然没有响应 请提供minimal reproducible example。 墨菲再次出击!我花了一些时间设置了一个最小的示例,尽管 pyuic5 生成的代码并不是那么简单,当然,一切都很完美。 【参考方案1】:在尝试生成具有相同问题的最小示例时,我找到了原因。基本上我在执行 show() 之前对 UI 进行了更改 我所拥有的(为了清楚起见,代码最小化)
class Dialog(QtWidgets.QDialog):
def __init__(self, **kwargs):
super().__init__()
self.dlg_ui = Ui_Dialog()
self.dlg_ui.setupUi(self)
self.setModal(True)
self.init_ui(**kwargs) # load the UI widgets with data
self.show()
应该是的
class Dialog(QtWidgets.QDialog):
def __init__(self, **kwargs):
super().__init__()
self.dlg_ui = Ui_Dialog()
self.dlg_ui.setupUi(self)
self.setModal(True)
self.show() # excute BEFORE loading the UI
self.init_ui(**kwargs) # load the UI widgets with data
【讨论】:
以上是关于QFormLayout的PyQt5顶行没有响应鼠标点击的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我放大Windows尺寸时,pyqt5中笔没有在鼠标坐标点上绘画