pyqt5循環生成按鈕並且直接連接事件,但是點擊按鈕的時候只是響應最後一個事件22222

#-*-coding:utf-8-*-
#作者--宋春風
#時間:2019-03-05
'''
1.這裏說明我爲什不用from XXX import XXX
因爲我做項目需要打包成exe,from XXX import XXX打包總失敗
2.循環傳值解決重要兩個條件:1.button是list 2.sender接收你按鈕上的字,再做爲傳入你的事件的值
3.這裏寫的已經比較清楚了,但是還不是很全面,希望能幫到和我一樣遇到過懶得複製粘貼,
想循環創建多個按鈕,然後直接連接事件的朋友
4.這個是自己修改後的版本,看的不是很難懂了
'''
import PyQt5.QtCore as Qt
import PyQt5.QtWidgets as widgets
import PyQt5.QtWebEngineWidgets as QtWeb
import PyQt5.QtGui as gui
import sys
class Sign(widgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.__initUI__()
    def __initUI__(self):
        #窗口大小
        self.resize(400,200)
        self.hoxlayout = widgets.QHBoxLayout(self)
        #創建一個按鈕,想循環傳值必須是列表(內容可以試其他我只試過數字--感興趣可以試試其他)
        #self.button1 = []
        #根據自己的要求自己設置按鈕上的字---這裏很重要,這些字將會做爲傳遞參數的依據
        self.x = ['a','b','c','d']
        for j in range(0, len(self.x)):
            #將數字j加進button
            #self.button1.append(j)
            self.button = widgets.QPushButton(self)
            self.button.setFixedSize(50, 50)
            self.button.setStyleSheet('''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''')
            #此處將字傳入按鈕
            self.button.setText(self.x[j])
            self.hoxlayout.addWidget(self.button)
            #傳達參數--重要,這裏sender將接收你點擊的字並傳入函數
            self.button.clicked.connect(lambda :self.table(self.sender().text()))
        #因爲我這使用的是QMainWindow,所以要創建一個Widget,才能顯示所有的按鈕
        self.widget = widgets.QWidget()
        self.widget.setLayout(self.hoxlayout)
        self.setCentralWidget(self.widget)
    def table(self,n):
        #用於測試,因爲只是測試,所有僅僅用打印來證明不是隻是最後一個按鈕有效,每次點擊都會不同
        #解決pyqt5循環生成按鈕並且直接連接事件,但是點擊按鈕的時候只是響應最後一個事件
        print(n)
if __name__ == "__main__":
    app = widgets.QApplication(sys.argv)
    window = Sign()
    window.show()
    sys.exit(app.exec_())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章