【发布时间】:2021-11-03 12:03:30
【问题描述】:
当我单击带有以下源代码的按钮时,我正在尝试使用函数:
from PySide2.QtWidgets import QApplication
from ui_interface import *
from Custom_Widgets.Widgets import *
from PyQt5.QtGui import QIcon
# from PyQt5.QtWidgets import *
from Custom_Widgets.Widgets import QCustomSlideMenu
import sys
class MainWindow(QMainWindow):
def __init__(self,parent = None):
QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
########################################################################
# APPLY JSON STYLESHEET
########################################################################
# self = QMainWindow class
# self.ui = Ui_MainWindow / user interface class
loadJsonStyle(self, self.ui)
########################################################################
self.show()
self.ui.pushButton_2.clicked.connect(self.my_text())
@pyqtSlot()
def on_button1(self):
print("Button #1")
def my_text(self):
index = 1
print("{0} button clicked".format(index))
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
# app.setWindowIcon(QIcon(':/icons/home.ico'))
window.show()
sys.exit(app.exec_())
当我这样使用时:
self.ui.pushButton_2.clicked.connect(self.my_text())
当我点击按钮时,什么都不显示。
但如果我这样使用:
self.ui.pushButton_2.clicked.connect(lambda: self.my_text())
有效。
而且当我这样使用时:
self.ui.pushButton_2.clicked.connect(self.on_button1())
它有效。 但是我不明白为什么第一步不起作用?
【问题讨论】:
-
当你将信号连接到一个槽时,你应该只传递一个函数,但你传递的是一个函数调用。基本上,您需要删除括号。
self.ui.pushButton_2.clicked.connect(self.my_text)应该可以正常工作,类似于self.ui.pushButton_2.clicked.connect(lambda: self.my_text()) -
但是如果我使用参数我如何使用没有函数类型的参数。例如,如果我有 def my_text(self,index): 函数,我如何为 my_text 函数提供索引?
-
这种情况下需要通过lambda函数来传递。