Python PyQT-引用特定选项卡中的小部件

Python PyQT-引用特定选项卡中的小部件,python,qt,tabs,Python,Qt,Tabs,例如,我希望选项卡中的一个按钮清除该选项卡中的文本编辑框,(我知道我可以直接执行此操作,但我想知道如何从函数返回小部件),但我不知道如何引用文本编辑: (这里的缩进很混乱,但在我这边很好) #/usr/bin/python 导入系统 从PyQt4导入QtGui、QtCore 类CC(QtGui.QWidget): 定义初始化(自): 超级(CC,self)。\uuuu init\uuuuu() self.initUI() def initUI(self): tab_widget=QtGui.QT

例如,我希望选项卡中的一个按钮清除该选项卡中的文本编辑框,(我知道我可以直接执行此操作,但我想知道如何从函数返回小部件),但我不知道如何引用文本编辑:

(这里的缩进很混乱,但在我这边很好)

#/usr/bin/python
导入系统
从PyQt4导入QtGui、QtCore
类CC(QtGui.QWidget):
定义初始化(自):
超级(CC,self)。\uuuu init\uuuuu()
self.initUI()
def initUI(self):
tab_widget=QtGui.QTabWidget(self)
##################表1
tab1=QtGui.QWidget()
layout=QtGui.QVBoxLayout(表1)
######向布局中添加小部件
clear=QtGui.QPushButton(“清除结果框”,选项卡1)
clear.resize(clear.sizeHint())
清除。移动(50,50)
clear.clicked.connect(self.clearit)
结果=QtGui.QTextEdit(表1)
结果。移动(250,50)
结果:设置固定宽度(450)
结果:设置固定高度(350)
######################
tab_widget.addTab(tab1,“tab1”)
mainLayout=QtGui.QVBoxLayout()
mainLayout.addWidget(选项卡小部件)
self.setGeometry(300300800500)
自设置固定大小(800500)
self.setWindowTitle('Crouton MN Toolw v05')
self.setWindowIcon(QtGui.QIcon('drk.ico'))
self.setLayout(主布局)
self.show()
def clearit(自身):

tab1.results.clear()######首先,您的选项卡布局工作是否正常?我知道有不同的方法可以做到这一点,但您从未在
tab1
小部件上专门设置布局。我会这样做:

tab1 = QtGui.QWidget()
layout = QtGui.QVBoxLayout()
tab1.setLayout(layout)
其次,您引用的链接是关于从
QTabWidget
获取单个选项卡小部件。在您的情况下,这将从
tab\u小部件
获取
tab1

第三,在
clearit
函数中,不能引用
initUI
函数中的任何旧变量。如果您不熟悉python变量范围,可能需要查找它。从
clearit
函数引用的任何内容都必须是全局的(通常是不必要的或不好的做法),或者必须作为参数传递。由于
QWidgets
是对象,因此提供了对对象实例本身的引用,
self
。因此,您可以这样做以获得对
结果
对象(未测试)的引用:

还有其他获取子对象的方法,但底线是您要遍历一系列布局和小部件来获取对象。最简单的解决方案(可能是您所称的“直接”方法)是在使用
结果
对象后将其放入
initUI
函数中:

self.results = results
然后在
clearit
功能中:

self.results.clear()

如果有更多的“Qt”方法,请告诉我。我认为这是“Pythic”的方式,但也许那只是我。

谢谢,这已经为我澄清了一些事情。目前,虽然我只是将我必须做的几件事情全球化,因为它简单且有效。:)好吧……但分配给自己可能比设定一个全球目标更清晰、更正确,而且在我看来也更容易。
self.results = results
self.results.clear()