【发布时间】:2015-09-30 12:26:09
【问题描述】:
在我的 PyQt5 程序中,我有选项卡并使用一个函数多次创建同一个选项卡。在 PyQt 中,要在单击按钮时运行代码,您需要将其连接到另一个函数。在 createATab 函数中,我有一个 QLineEdit 在单击按钮时需要对其进行编辑。这是我正在尝试做的一个示例:
class Example(QWidget, QWindow):
def __init__(self):
super().__init__()
self.initUI()
def runThisWhenButtonClicked(self):
getText = editThisLine.text()
editThisLine.clear() # edits variable in other function except other function is run multiple times
def addTheTab(self, username):
addingTab = QWidget()
aButton = QPushButton("Stuff")
editThisLine = QLineEdit()
aButton.clicked.connect(self.runThisWhenButtonClicked)
tabGrid = QGridLayout(addingTab)
tabGrid.addWidget(editThisLine, 3, 1, 4, 2)
tabGrid.addWidget(aButton, 3, 3, 4, 3)
tab_widget.addTab(addingTab, str(username))
def initUI(self):
global tab_widget
tab_widget = QTabWidget()
listwidget = QListWidget()
listwidget.itemDoubleClicked.connect(self.addTheTab)
splitterrr = QSplitter()
splitterrr.addWidget(listwidget)
splitterrr.addWidget(tab_widget)
QListWidgetItem("Test1", listwidget)
QListWidgetItem("Test2", listwidget)
mainLayout = QHBoxLayout()
mainLayout.addWidget(splitterrr)
self.setLayout(mainLayout)
self.setGeometry(300, 300, 300, 300)
self.setWindowTitle('Test')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
How do I pass a variable by reference?
我已经阅读了这个,虽然它确实解释了很多,但它没有解释如何解决这个问题。
这解释了你如何只传递函数,而不是调用它。因此,无法将变量传递给 runThisWhenButtonClicked 函数。
【问题讨论】:
-
短版:使用
self.editThisLine。更长的版本:read up on classes, instances, and instance properties. -
关于短版 - 返回错误:“'Example' 对象没有属性 'editThisLine'。关于长版 - 感谢链接!
-
你必须在任何地方使用
self.editThisLine——首先设置它,然后引用它。您不是创建一个函数本地的变量,而是创建一个实例属性。该链接应该有助于解释发生了什么。 -
我添加了自己。在所有 editThisLine 之前,它现在编辑另一个选项卡,而不是单击按钮的选项卡。一旦我有更多时间,我会阅读更多文章。
标签: python python-3.x pyqt pyqt5