【问题标题】:how do I use qss in pyqt4?如何在 pyqt4 中使用 qss?
【发布时间】:2018-09-14 23:22:48
【问题描述】:

谁能告诉我如何在 pyqt4 中使用 qss 文件?我尝试在 QT 的官方文档中更改 QTdesigner 中的样式表,例如 this。但它没有用。我不确定它是否应该对 pyqt 有效。我找到了this question,但我不明白那是什么意思。谁能详细告诉我怎么做或者给我文档的链接?

【问题讨论】:

    标签: python pyqt4 qtstylesheets


    【解决方案1】:

    QSS 文件代码

    QWidget {
       background-color: #222222;
    }
    
    QLineEdit {
       background-color: aliceblue;
       color: #618b38;
       font-style: italic;
       font-weight: bold;
    }
    
    QLabel {
       background-color: #222222;
       color: #618b38;
    }
    
    QPushButton {
       background-color: #8b0000;
       color: #ffffff;
       border-radius: 5px;
       border-style: none;
       height: 25px;
    }
    

    图形用户界面代码

    from PyQt5 import QtCore, QtWidgets
    
    __author__ = "Psycho_Coder"
    
    
    # noinspection PyUnresolvedReferences
    class MainUiWindow(object):
    
       def __init__(self):
    
           #Main Window
           self.centralwidget = QtWidgets.QWidget(MainWindow)
    
           """
           Using Grid Layouts for Widgets Alignment
           """
           #Grid Layout for Main Grid Layout
           self.maingrid_layout = QtWidgets.QGridLayout(self.centralwidget)
    
           #Grid Layout for Result Section Layout
           self.resultgird = QtWidgets.QGridLayout()
    
           #Grid Layout for Information section
           self.infogrid = QtWidgets.QGridLayout()
    
           #Grid Layout for holding all the widgets in place
           self.outergrid = QtWidgets.QGridLayout()
    
           #Button to clear all test input
           self.clearall = QtWidgets.QPushButton(self.centralwidget)
    
           #Button to show the final result by append
           self.showres = QtWidgets.QPushButton(self.centralwidget)
    
           #Horizontal layout to hold the result section horizontally
           self.horizontal_layout = QtWidgets.QHBoxLayout()
    
           """
           Show results widgets
           """
           self.fullname = QtWidgets.QLabel(self.centralwidget)
           self.result = QtWidgets.QLabel(self.centralwidget)
    
           """
           Get Names info section
           """
           self.firstname = QtWidgets.QLabel(self.centralwidget)
           self.lastname = QtWidgets.QLabel(self.centralwidget)
    
           #TextBox to get user input
           self.fname = QtWidgets.QLineEdit(self.centralwidget)
           self.lname = QtWidgets.QLineEdit(self.centralwidget)
    
       def init_gui(self, MainWindow):
    
           MainWindow.setObjectName("MainWindow")
    
           MainWindow.setStyleSheet(open("style.qss", "r").read())
           MainWindow.setAutoFillBackground(True)
           MainWindow.resize(328, 166)
    
           self.centralwidget.setObjectName("centralwidget")
    
           self.maingrid_layout.setObjectName("maingrid_layout")
           self.outergrid.setObjectName("outergrid")
           self.infogrid.setObjectName("infogrid")
    
           self.firstname.setObjectName("firstname")
           self.infogrid.addWidget(self.firstname, 0, 0, 1, 1)
    
           self.fname.setObjectName("fname")
           self.infogrid.addWidget(self.fname, 0, 1, 1, 1)
    
           self.lastname.setObjectName("lastname")
           self.infogrid.addWidget(self.lastname, 1, 0, 1, 1)
    
           self.lname.setObjectName("lname")
           self.infogrid.addWidget(self.lname, 1, 1, 1, 1)
    
           self.outergrid.addLayout(self.infogrid, 0, 0, 1, 1)
    
           self.fullname.setObjectName("fullname")
    
           self.result.setMaximumSize(QtCore.QSize(140, 16777215))
           self.result.setObjectName("result")
    
           self.resultgird.setObjectName("resultgird")
           self.resultgird.addWidget(self.fullname, 0, 0, 1, 1)
           self.resultgird.addWidget(self.result, 0, 1, 1, 1)
    
           self.outergrid.addLayout(self.resultgird, 1, 0, 1, 1)
    
           self.showres.setObjectName("showres")
           self.clearall.setObjectName("clearall")
    
           self.horizontal_layout.setObjectName("horizontal_layout")
           self.horizontal_layout.addWidget(self.showres)
           self.horizontal_layout.addWidget(self.clearall)
    
           self.outergrid.addLayout(self.horizontal_layout, 2, 0, 1, 1)
           self.maingrid_layout.addLayout(self.outergrid, 0, 0, 1, 1)
    
           MainWindow.setCentralWidget(self.centralwidget)
    
           self.retranslate_gui(MainWindow)
    
           #Add signals of clear to LineEdit widgets to clear the texts
           self.clearall.clicked.connect(self.result.clear)
           self.clearall.clicked.connect(self.lname.clear)
           self.clearall.clicked.connect(self.fname.clear)
           self.showres.clicked.connect(self.__name)
    
           QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
       def __name(self):
           name = self.fname.text() + " " + self.lname.text()
           self.result.setText("" + name + "")
    
       def retranslate_gui(self, MainWindow):
           _translate = QtCore.QCoreApplication.translate
    
           MainWindow.setWindowTitle(_translate("MainWindow", "Name Concatenation"))
           self.lastname.setText(_translate("MainWindow", "Last Name :"))
           self.firstname.setText(_translate("MainWindow", "First Name :"))
           self.fullname.setText(_translate("MainWindow", "Concatenated Name :-"))
           self.result.setText(_translate("MainWindow", ""))
           self.showres.setText(_translate("MainWindow", "Show Name!"))
           self.clearall.setText(_translate("MainWindow", "Clear All"))
    
    if __name__ == "__main__":
       import sys
       app = QtWidgets.QApplication(sys.argv)
       MainWindow = QtWidgets.QMainWindow()
       ui = MainUiWindow()
       ui.init_gui(MainWindow)
    
       MainWindow.show()
       sys.exit(app.exec_())
    

    参考

    https://codehackersblog.blogspot.com/2015/10/python-simple-pyqt5-gui-example-with-qss.html

    【讨论】:

      【解决方案2】:

      您可以在 Qt 中通过设计器或代码更改样式表。 如果你想加载一个 qss 文件并将一个样式表设置为一个小部件,你只需要读取文件并将读取的内容放入样式表中就可以了(当然文件必须是正确的格式)。

      例子:

      style_file.qss

      QLineEdit{border-style: solid;
              border-width: 1px;
              border-radius: 5px;
              border-color: rgb(125,125,125);
              background-color: rgba(255, 134, 134, 150);}
      

      在你的 python 文件中加载上面的文件并应用该样式表:

          qss_file = open('style_file.qss').read()
          ui.your_line_edit_control.setStyleSheet(qss_file)
      

      如果你想通过 QtDesigner 编辑样式表,只需将

      QLineEdit{border-style: solid;
              border-width: 1px;
              border-radius: 5px;
              border-color: rgb(125,125,125);
              background-color: rgba(255, 134, 134, 150);}
      

      在控件中右键单击您的控件并选择“编辑样式表

      注意:此样式仅适用于 QLineEdit,就像样式代码中指定的一样...但当然您可以对所有小部件(QToolButton、QLabel 等)使用相同的方式。

      【讨论】:

      • 这些天我自己找到了解决方案。只是因为我太粗心了。无论如何都非常感谢!
      猜你喜欢
      • 2020-08-13
      • 2018-01-04
      • 2017-04-29
      • 1970-01-01
      • 2019-05-13
      • 2019-04-15
      • 2022-01-08
      • 2015-03-15
      • 2020-11-19
      相关资源
      最近更新 更多