【发布时间】:2021-04-20 15:25:48
【问题描述】:
我无法访问 Ui_MainWindow 类中的属性 self.horizontalLayout_Base,我想在其中添加新的小部件。
有:
- 继承类Ui_MainWindow的主类MainWindow。
- Ui_MainWindow 类创建布局。
- 类对话提供额外信息和确认或取消。
主类 MainWindow 调用类 Dialog。查询Dialog类,然后调用MainWindow类中的tableWidget方法。但是无法访问由 Ui_MainWindow 类创建的属性 self.horizontalLayout_Base。
有什么方法可以访问吗?
主类MainWindow
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, *args, obj=None, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
...
self.setupUi(self)
...
def tableWidget(self):
if len(list) > 0:
row = len(list)
clmn = len(list[0])
self.tableWidget = QTableWidget(row, clmn + 1)
else:
return
self.vbox = QVBoxLayout()
...
Ui_MainWindow.gridLayout_Base.addLayout(self.vbox) # Here I want to get access
布局类 Ui_MainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1110, 772)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
self.centralwidget = QtWidgets.QWidget(MainWindow)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
self.centralwidget.setSizePolicy(sizePolicy)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.horizontalLayout_Base = QtWidgets.QHBoxLayout() # This is target
...
类对话框
class Dialog(QDialog):
NumGridRows = 3
NumButtons = 4
def __init__(self, souradnice):
super(Dialog, self).__init__()
...
def buttonAccepted(self):
...
MainWindow.tableWidget(self)
self.close()
【问题讨论】:
-
如果你想添加一个QTableWidget,那你为什么要创建一个布局?
-
这是一个基于事件的附加小部件
-
对不起,您的回答没有多大意义。小部件和布局是两个完全不同的东西。
-
其他小部件是使用布局中的 QTableWidget 创建的,我需要将 vbox 布局中的这个“包”放入 Ui_MainWindow.gridLayout_Base.addLayout(self.vbox)。
-
供将来参考,如果您只想共享部分代码,那可能没问题,但前提是其余部分有意义。提供一个最小的 [可重现] 示例并不意味着尽可能少地共享代码,因为我们无法知道您遗漏的所有内容,这可能会使阅读您的代码感到困惑。 “最少”意味着您应该向我们提供任何人阅读和理解您的代码的作用所需的最少代码。
标签: python class pyqt5 pyside2