例如,我想要一个选项卡中的按钮来清除该选项卡中的textEdit框,(我知道我可以直接执行此操作,但我想知道如何从函数中返回到小部件)但是我可以&# 39;弄清楚如何引用textEdit:
(缩进在这里搞砸了但在我的结尾很好)
#!/usr/bin/python
import sys
from PyQt4 import QtGui, QtCore
class CC(QtGui.QWidget):
def __init__(self):
super(CC, self).__init__()
self.initUI()
def initUI(self):
tab_widget = QtGui.QTabWidget(self)
################## tab1
tab1 = QtGui.QWidget()
layout = QtGui.QVBoxLayout(tab1)
###### add widgets to layout
clear = QtGui.QPushButton('clear results box', tab1)
clear.resize(clear.sizeHint())
clear.move(50, 50)
clear.clicked.connect(self.clearit)
results = QtGui.QTextEdit(tab1)
results.move(250, 50)
results.setFixedWidth(450)
results.setFixedHeight(350)
######################
tab_widget.addTab(tab1, "Tab 1")
mainLayout = QtGui.QVBoxLayout()
mainLayout.addWidget(tab_widget)
self.setGeometry(300, 300, 800, 500)
self.setFixedSize(800, 500)
self.setWindowTitle('Crouton MN Toolw v05')
self.setWindowIcon(QtGui.QIcon('drk.ico'))
self.setLayout(mainLayout)
self.show()
def clearit(self):
tab1.results.clear() ##### <<< here is what doesn't work, please help :)
#self.results.clear()
def main():
app = QtGui.QApplication(sys.argv)
ex = CC()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
我已经尝试过self.results.clear(),tab_widget.results.clear(),tab1.results.clear()以及其他十几种变化,但没有快乐,我错过了一些明显的东西。 (就像大脑一样。)
我找到了这个答案,但我太愚蠢了,无法掌握我应该做的事情: How to reference a widget inside a specific tab of a QTabWidget?
任何帮助表示赞赏!
编辑:我可以通过坚持全球结果来实现这一目标&#39;在initUI内部并调用&#39; results.clear()&#39;从功能,但肯定有更正确的方法?
答案 0 :(得分:0)
首先,您的标签布局确实有效吗?我知道有不同的方法可以做到这一点,但你从未在tab1
小部件上专门设置布局。我会这样做:
tab1 = QtGui.QWidget()
layout = QtGui.QVBoxLayout()
tab1.setLayout(layout)
其次,您引用的链接是关于从QTabWidget
获取单个选项卡小部件。在您的情况下,这将从tab1
获得tab_widget
。
第三,在clearit
函数中,您无法引用initUI
函数中的任何旧变量。如果您不熟悉python变量范围,您可能需要查找它。您从clearit
函数引用的任何内容都必须是全局的(通常是不必要的或不好的实践),或者必须作为参数传递。由于QWidgets
是对象,因此您将获得对对象实例本身的引用self
。所以你可以做这样的事情来获得对results
对象(未经测试)的引用:
results = self.layout.children()[0].widget(0).layout.children()[1]
results.clear()
还有其他方法可以让孩子们,但最重要的是你要遍历一系列布局和小工具来获取对象。最简单的解决方案(可能是您所称的“直接”方法)是在使用initUI
对象后将其放入results
函数中:
self.results = results
然后在clearit
函数中:
self.results.clear()
如果有更多的“Qt”方式,请告诉我。我认为这是“pythonic”的方式,但也许这只是我。