Как я могу изменить цвет кнопки, когда я выбираю ее, и для каждого макета я хочу выбрать одну кнопку только с помощью pyqt4? - PullRequest
0 голосов
/ 08 декабря 2018

Вот мой пример кода.У меня есть горизонтальный и вертикальный ряд, и я возьму текст в горизонтальном и вертикальном положении.Когда я выбираю любую кнопку в макетах, эту ключевую кнопку я хочу изменить на синий цвет, когда я выбираю другую кнопку, кнопка автоматически обновляет синий цвет, и предыдущая кнопка будет иметь оригинальный цвет. Ниже приведен мой код:

import sys
from PySide import QtGui,QtCore
from functools import partial
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    def initUI(self):
        self.hbox = QtGui.QHBoxLayout()
        self.v1box = QtGui.QVBoxLayout()
        self.v2box = QtGui.QVBoxLayout()
        self.labl = QtGui.QLabel("horizontal")
        self.v1box.addWidget(self.labl)
        for key in ['1', '2', '3', '4', '5', '6']:
            self.btns1 = QtGui.QPushButton(str(key))
            self.btns1.clicked.connect(partial(self.text1, key, "horizontal"))
            self.v1box.addWidget(self.btns1)
        self.lab2 = QtGui.QLabel("vertical")
        self.v2box.addWidget(self.lab2)
        for key in ['1', '2', '3', '4', '5', '6']:
            self.btns2 = QtGui.QPushButton(str(key))
            self.btns2.clicked.connect(partial(self.text2, key,"Vertical"))
            self.v2box.addWidget(self.btns2)
        self.hbox.addLayout(self.v1box)
        self.hbox.addLayout(self.v2box)
        self.setLayout(self.hbox)
    def text1(self,key,type):
        if type == "horizontal":
            X = int(str(key))
            print X, "xxx"
    def text2(self,key,type):
        if type == "vertical":
            Y = int(str(key))

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 08 декабря 2018

Вы можете включить свойство checkeable QPushButton и использовать QButtonGroup, чтобы проверялся только один из них.Затем с помощью отмеченного псевдо-состояния задается желаемый стиль.

import sys
from PySide import QtCore, QtGui 
from functools import partial

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        self.setStyleSheet("QPushButton::checked{ background-color:blue; border: none; }")
        v1box = QtGui.QVBoxLayout()
        v1box.addWidget(QtGui.QLabel("horizontal"))
        group1 = QtGui.QButtonGroup(self)
        for key in ['1', '2', '3', '4', '5', '6']:
            btn = QtGui.QPushButton(str(key), checkable=True)
            btn.clicked.connect(partial(self.text1, key, "horizontal"))
            v1box.addWidget(btn)
            group1.addButton(btn)

        v2box = QtGui.QVBoxLayout()
        v2box.addWidget(QtGui.QLabel("vertical"))
        group2 = QtGui.QButtonGroup(self)
        for key in ['1', '2', '3', '4', '5', '6']:
            btn = QtGui.QPushButton(str(key), checkable=True)
            btn.clicked.connect(partial(self.text2, key,"vertical"))
            v2box.addWidget(btn)
            group2.addButton(btn)

        hbox = QtGui.QHBoxLayout(self)
        hbox.addLayout(v1box)
        hbox.addLayout(v2box)

    def text1(self, key, direction):
        if direction == "horizontal":
            X = int(str(key))
            print(X, "xxx")

    def text2(self, key, direction):
        if direction == "vertical":
            Y = int(str(key))
            print(Y, "yyy")


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
...