首页 > 解决方案 > 单击时更改 QPushButton 文本

问题描述

我正在编写一个简单的 GUI 程序,并且需要我的按钮在单击时更改文本。我就像在示例中一样对其进行了编码,但它不起作用。

示例代码:

class MyWidget(QtWidgets.QWidget):

    def __init__(self):
        QtWidgets.QWidget.__init__(self)

        self.hello = ["Hallo Welt", "你好,世界", "Hei maailma",
            "Hola Mundo", "Привет мир"]
        self.button = QtWidgets.QPushButton("Click me!")
        self.text = QtWidgets.QLabel("Hello World")
        self.text.setAlignment(QtCore.Qt.AlignCenter)
        self.layout = QtWidgets.QVBoxLayout()
        self.layout.addWidget(self.text)
        self.layout.addWidget(self.button)
        self.setLayout(self.layout)

        self.button.clicked.connect(self.magic)


    def magic(self):
        self.text.setText(random.choice(self.hello))

我的代码:

class Form(QWidget):
    def __init__(self):
        super(Form, self).__init__()

        # Font
        r_one = QFont("RussoOne-Regular", 40, QFont.Bold) 

        # Buttons
        self.pvz_p_score = QPushButton('0')
        self.pvz_z_score = QPushButton('0')
        self.pvt_p_score = QPushButton('0')
        self.pvt_t_score = QPushButton('0')
        self.pvp_p1_score = QPushButton('0')
        self.pvp_p2_score = QPushButton('0')

        buttons = [self.pvz_p_score, 
                   self.pvz_z_score, 
                   self.pvt_p_score, 
                   self.pvt_t_score, 
                   self.pvp_p1_score,
                   self.pvp_p2_score]

        for b in buttons:
            b.setStyleSheet('QPushButton {background-color: #8ffe09;\
                                          color: black;\
                                          border: none}')
            b.setFlat(True)
            b.setIconSize(QSize(100,100))
            b.setFont(r_one)
            b.setContextMenuPolicy(Qt.CustomContextMenu)
            b.clicked.connect(self.left_click)
            b.customContextMenuRequested.connect(self.right_click)

...

    def left_click(self):
        self.text.setText(int(self.text)+1)

    def right_click(self):
        if int(self.text) > 0: button.text.setText(int(self.text)-1)

但是,在我的情况下self对应于Form,在示例中它链接到button. 有任何想法吗?

标签: pythonpyside2

解决方案


  1. self.text指的是一个 QLabel 小部件。因此,它不能转换为整数进行比较。
  2. QLabeltext()及其方法setText()使用字符串,而不是整数。要设置文本,您可以将数字转换为字符串,或使用setNum()接受整数和浮点值(但没有num()函数)。
    def left_click(self):
        self.text.setText(str(int(self.text.text()) + 1))
        # alternatively:
        # self.text.setNum(int(self.text.text()) + 1)

    def right_click(self):
        if int(self.text.text()) > 0:
            button.text.setText(str(int(self.text.text()) - 1))
            # alternatively:
            # button.text.setNum(int(self.text.text()) - 1)

请注意,我假设存在文本并且可以将其转换为整数。


推荐阅读