Pyqt5 List QtPushbutton add border-image - PullRequest
0 голосов
/ 28 октября 2018

Я использую Python 3 (Pycharm) с Pyqt5 (Windows 10)

Мне нужно использовать список QPushbutton.Мне удалось изменить цвет кнопки, все в порядке.Тем не менее, я не мог изменить изображение border-image (то же самое QT), в свою функцию добавить кнопку (Add_Buttons_KA_IU) Структура моего реперториума:

My_Project:

|-> Vision_Room.py

|-> Ressource -> LightOff.png 

import sys
from PyQt5.QtWidgets import QMainWindow,QWidget,QLabel,QLineEdit,QPushButton,QApplication,QVBoxLayout
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindows(QMainWindow):
    buttons_KA, keydata_KA = {}, {}
    Positions_Button_KA = [(330, 70, 10, 20),(270, 110, 10, 20),(300, 110, 10, 20),(360, 110, 10, 20),(330, 150, 10, 20),
                           (180, 190, 10, 20),(240, 190, 10, 20),(300, 190, 10, 20),(360, 190, 10, 20),(210, 230, 10, 20),
                           (270, 230, 10, 20),(330, 230, 10, 20),(180, 270, 10, 20),(240, 270, 10, 20),(270, 270, 10, 20),
                           (300, 270, 10, 20),(360, 270, 10, 20),(210, 310, 10, 20),(330, 310, 10, 20),(180, 350, 10, 20),
                           (240, 350, 10, 20),(300, 350, 10, 20),(360, 350, 10, 20),(210, 390, 10, 20),(270, 390, 10, 20),
                           (330, 390, 10, 20),(180, 430, 10, 20),(240, 430, 10, 20),(300, 430, 10, 20),(360, 430, 10, 20)]

    def __init__(self):
        super(Ui_MainWindows,self).__init__()
        #self.layout = QVBoxLayout()
        self.resize(1280,960)
        self.centralWidget = QWidget(self)
        self.setCentralWidget(self.centralWidget)
        self.setWindowTitle("Vision Room")
        #self.setStyleSheet("background-color: rgb(0, 0, 0);")
        self.Add_Buttons_KA_IU()

    def Add_Buttons_KA_IU(self):
        Name_Button = "Button_KA"
        for i in range(0, 30):

            Full_Name_Button = Name_Button + str(i)
            print(Full_Name_Button)

            b = self.buttons_KA[i] = QtWidgets.QPushButton(self.centralWidget)

            b.setGeometry(QtCore.QRect(self.Positions_Button_KA[i][0],self.Positions_Button_KA[i][1],self.Positions_Button_KA[i][2],
                                       self.Positions_Button_KA[i][3]))


            #str_Style_Sheet = "#" + Full_Name_Button + "\n" "{\n""background-color: rgb(0, 0, 255);\n" "}"
            str_Style_Sheet = "#" + Full_Name_Button + "\n" "{\n""border-image: url(:/Ressource/LightOff.png);\n" "}"
            print(str_Style_Sheet)
            b.setObjectName(Full_Name_Button)

            b.setStyleSheet(str_Style_Sheet)

def main():
    app = QApplication(sys.argv)
    MainWindow = Ui_MainWindows()
    MainWindow.show()

    rc = app.exec_()
    sys.exit(rc)


if __name__ == "__main__":
    main()

1 Ответ

0 голосов
/ 28 октября 2018

Прежде всего, если вы собираетесь добавить QSS к каждой кнопке, нет необходимости использовать objectName, с другой стороны, проблема вызвана тем, что вы не понимаете, что означает «:», а «:» означает, чтовы используете qresource (.qrc), который является файлом, который позволяет универсально хранить файлы в Qt, и это виртуальный путь, вы не должны использовать эти ":", потому что вы его не используете.С другой стороны, всегда лучше иметь полный путь к файлам, чтобы избежать проблем, но им также должно быть легко управлять, поэтому решение состоит в том, чтобы получить путь к .py и объединить его с относительным путем к ресурсу.относительно .py, так что вы можете переместить свой проект, и даже тогда он будет работать.

import os
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

dir_path = os.path.dirname(os.path.realpath(__file__))

positions_button_KA = [(330, 70, 10, 20),(270, 110, 10, 20),(300, 110, 10, 20),(360, 110, 10, 20),(330, 150, 10, 20),
                       (180, 190, 10, 20),(240, 190, 10, 20),(300, 190, 10, 20),(360, 190, 10, 20),(210, 230, 10, 20),
                       (270, 230, 10, 20),(330, 230, 10, 20),(180, 270, 10, 20),(240, 270, 10, 20),(270, 270, 10, 20),
                       (300, 270, 10, 20),(360, 270, 10, 20),(210, 310, 10, 20),(330, 310, 10, 20),(180, 350, 10, 20),
                       (240, 350, 10, 20),(300, 350, 10, 20),(360, 350, 10, 20),(210, 390, 10, 20),(270, 390, 10, 20),
                       (330, 390, 10, 20),(180, 430, 10, 20),(240, 430, 10, 20),(300, 430, 10, 20),(360, 430, 10, 20)]


class Ui_MainWindows(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui_MainWindows,self).__init__()
        self.central_widget = QtWidgets.QWidget()
        self.setCentralWidget(self.central_widget)
        self.setWindowTitle("Vision Room")

        self.buttons_KA = {}

        self.add_buttons_KA_IU()
        self.resize(1280, 960)


    def add_buttons_KA_IU(self):
        name_group = "button_KA"
        for i, geom in enumerate(positions_button_KA):
            b = QtWidgets.QPushButton(self.central_widget)
            b.setGeometry(*geom)
            path_image = os.path.join(dir_path, "Ressource/LightOff.png").replace("\\", "/")
            qss = 'border-image: url({})'.format(path_image)
            b.setStyleSheet(qss)

            self.buttons_KA[i] = b

def main():
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = Ui_MainWindows()
    MainWindow.show()

    rc = app.exec_()
    sys.exit(rc)


if __name__ == "__main__":
    main()

Linux:

enter image description here

Windows:

enter image description here

...