我使用QStackedWidget在不同的视图之间切换。每个窗格基本上都是一个类,应该驻留在它自己的文件中。在
问题是我想从另一个文件访问QTableView,而不将它的引用传递到构造函数中。在
主文件:
class MyApp(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyApp, self).__init__(parent)
self.setupUi(self)
第二个文件
^{pr2}$我得到这个错误:
AttributeError: type object 'QMainWindow' has no attribute 'tblLimits'
如您所见,我想访问在QtDesigner中创建的名为“tblLimits”的表,但无法在第二个文件中访问它。在
有什么建议吗?在
(编辑格式)
我编辑这篇文章是为了展示我所做的工作:
总的来说,实例化类时:
self.LimitsEditor = LimitsEditor(self.ui.tblLimits)
在LimitseEditor文件中:
class LimitsEditor():
def __init__(self, tblLimits):
self.tblLimits = tblLimits
现在基本上我可以访问表self.ui.tlbLimits'或'自我限制编辑器' 我就是这样做的,而且效果很好。这在我看来不太合适,所以我想知道是否有一种方法可以将所有UI元素的知识继承到另一个类/子类中。在
如果您试图让
LimitsEditor
能够访问MyApp正在使用的完全相同的表实例,那么您尝试的这种方法是不可能的。ui文件是应用于类的小部件布局的描述。当您在QMainWindow类中调用setupUi()时,它将创建实例。实际的UI模块不包含对这些实例的任何引用,您可以在另一个文件中访问这些实例。在您必须共享从}的实例引用。这归根结底是一个设计决定。以下是一些建议(因为我不知道你的应用程序是如何组织的)
MyApp
到{LimitsEditor
不知道表小部件,并发出信号,您的父对象将监听并管理表实例作为响应LimitsEditor
。您的LimitsEditor不会直接引用表,而是会接收它可以处理的事件。在引用您看到的异常,
QMainWindow
是PyQt4类,不包含您的自定义子窗口小部件。它们位于自定义类的实例上,该类包含setupUi()
调用。然后您将需要通过self.tblLimits
来访问它,但这同样只适用于实际使用Ui文件的类,而不是其他随机类。在在PyQt中使用QtDesigner时,通常遵循相同的模式:
例如:
确保通过实例ui元素访问小部件。在
相关问题 更多 >
编程相关推荐