PyQt5按钮单击不使用功能[重复]

Posted

技术标签:

【中文标题】PyQt5按钮单击不使用功能[重复]【英文标题】:PyQt5 Button Clicked Not Working with Function [duplicate] 【发布时间】: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函数来传递。 【参考方案1】:

试试这个

from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 
from PyQt5.QtCore import * 
import sys
  
  
class Window(QMainWindow):
    def __init__(self):
        super().__init__()
  
        # setting title
        self.setWindowTitle("Python ")
  
        # setting geometry
        self.setGeometry(100, 100, 600, 400)
  
        # calling method
        self.UiComponents()
  
        # showing all the widgets
        self.show()
  
    # method for widgets
    def UiComponents(self):
  
        # creating a push button
        button = QPushButton("CLICK", self)
  
        # setting geometry of button
        button.setGeometry(200, 150, 100, 30)
  
        # adding action to a button
        button.clicked.connect(self.clickme)
  
    # action method
    def clickme(self):
        print("pressed")
  
# create pyqt5 app
App = QApplication(sys.argv)
  
# create the instance of our Window
window = Window()
  
# start the app
sys.exit(App.exec())

你在找这个吗???

【讨论】:

我从geeksforgeeks.org/pyqt5-how-to-add-action-to-a-button抓到的

以上是关于PyQt5按钮单击不使用功能[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在pyqt5中单击按钮之前触发浏览按钮方法[重复]

在 main 上而不是在 pyqt5 的脚本上实现按钮的功能

PyQt5在进行任何交互时崩溃[重复]

即使未单击单选按钮,仍会提交表单[重复]

PyQt5 自我参考

PyQt5 按钮动画