QFont.setFamily () не работает с пользовательским шрифтом - PullRequest
0 голосов
/ 22 октября 2018

Я пытался создать хороший графический интерфейс для своей программы, и я знал, что мне также нужен классный шрифт.Поэтому я установил шрифт 'Ubuntu' со всеми весами.

Но когда я пытаюсь это сделать:

class MenuButton(QPushButton):
    def __init__(self, caption):
        super().__init__()
        self.setFixedHeight(60)
        self.setFixedWidth(100)
        self.setFlat(True)
        font = QFont()
        font.setFamily('Ubuntu')
        font.setWeight(QFont.Bold)
        font.setPixelSize(20)
        self.setFont(font)
        self.setStyleSheet("color: rgb(85,170,255);")
        self.setText(caption)

, я получаю шрифт, который совершенно точно не тот, который я выбрал:

enter image description here

Но когда я призываю QFontDialog в начале моего приложения, я вижу шрифт Ubuntu, и он называется Ubuntu!

enter image description here

Почему он не работает и что я должен сделать, чтобы он работал?

Цените помощь ...

Вот и все:

import sys
import _thread
from PyQt5.QtCore import QSize, Qt, QRect, QObject
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QLabel, QTabWidget, QGridLayout, QVBoxLayout, \
QHBoxLayout, QSizePolicy, QSpacerItem, QStyle, QStyleFactory, QPushButton, QFrame, QFontDialog, QStackedWidget
from PyQt5.QtGui import QImage, QIcon, QPixmap, QPalette, QBrush, QColor, QFontDatabase, QFont

### Custom Classes

class MenuButton(QPushButton):
    def __init__(self, caption):
        super().__init__()
        self.setFixedHeight(40)
        self.setFixedWidth(100)
        self.setFlat(True)
        font = QFont()
        font.setFamily('Ubuntu')
        font.setWeight(QFont.Bold)
        font.setPixelSize(19)
        self.setFont(QFont('Ubuntu', 19, QFont.Medium))
        self.setStyleSheet("color: rgb(85,170,255);")
        self.setText(caption)

    def select(self):
        self.setStyleSheet("color: rgb(255,255,255);")
    def deselect(self):
        self.setStyleSheet("color: rgb(85,170,255);")

class StackPage(QWidget):
    def __init__(self):
        super().__init__()
        self.setStyleSheet('background-color: rgb(28,33,39)')
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

class MainScreen(QWidget):

    def __init__(self):
        super().__init__()

        #self.windowWidth = 500
        #self.windowHeight = 300

        self.icon = 'images\\system\\HashshashinLogo.png'
        self.title = 'DevOrder'

        self.fontFamily = 'Segoe UI' # Corbel | Sagoe UI
        self.fontColor = 'black'
        self.fontSize = '12'

        self.initUI()

    def initUI(self):

        self.setStyleSheet('font-family: %s; color: %s; background-color: rgb(28,33,39);' % (self.fontFamily, self.fontColor))
        self.setWindowTitle(self.title)
        self.setWindowIcon(QIcon(self.icon))
        #self.setFixedSize(self.windowWidth, self.windowHeight)

        ### Top Menu

        def menubtnProjectsClicked():
            menubtnProjects.select()
            menubtnClients.deselect()
            menubtnUpdates.deselect()
            menubtnSettings.deselect()
            self.leftStackMenu.setCurrentIndex(0)
        def menubtnClientsClicked():
            menubtnProjects.deselect()
            menubtnClients.select()
            menubtnUpdates.deselect()
            menubtnSettings.deselect()
            self.leftStackMenu.setCurrentIndex(1)
        def menubtnUpdatesClicked():
            menubtnProjects.deselect()
            menubtnClients.deselect()
            menubtnUpdates.select()
            menubtnSettings.deselect()
            self.leftStackMenu.setCurrentIndex(2)
        def menubtnSettingsClicked():
            menubtnProjects.deselect()
            menubtnClients.deselect()
            menubtnUpdates.deselect()
            menubtnSettings.select()
            self.leftStackMenu.setCurrentIndex(3)

        menubtnProjects = MenuButton('Projects')
        menubtnProjects.clicked.connect(menubtnProjectsClicked)
        menubtnClients = MenuButton('Clients')
        menubtnClients.clicked.connect(menubtnClientsClicked)
        menubtnUpdates = MenuButton('Updates')
        menubtnUpdates.clicked.connect(menubtnUpdatesClicked)
        menubtnSettings = MenuButton('Settings')
        menubtnSettings.clicked.connect(menubtnSettingsClicked)

        ### Left Menu

        self.leftStackMenu = QStackedWidget()
        self.leftStackMenu.setFixedWidth(500)

        leftProjectsPage = StackPage()
        leftProjectsPage.setStyleSheet('background-color: white;')
        leftClientsPage = StackPage()
        leftClientsPage.setStyleSheet('background-color: red;')
        leftUpdatesPage = StackPage()
        leftUpdatesPage.setStyleSheet('background-color: blue;')
        leftSettingsPage = StackPage()
        leftSettingsPage.setStyleSheet('background-color: yellow;')

        self.leftStackMenu.addWidget(leftProjectsPage)
        self.leftStackMenu.addWidget(leftClientsPage)
        self.leftStackMenu.addWidget(leftUpdatesPage)
        self.leftStackMenu.addWidget(leftSettingsPage)



        ### Placings

        menuLayout = QHBoxLayout()
        menuLayout.setContentsMargins(50, 10, 10, 10)
        menuLayout.addWidget(menubtnProjects)
        menuLayout.addWidget(menubtnClients)
        menuLayout.addWidget(menubtnUpdates)
        menuLayout.addWidget(menubtnSettings)
        menuLayout.addSpacerItem(QSpacerItem(20, 40, QSizePolicy.Expanding, QSizePolicy.Minimum))

        stacksLayout = QHBoxLayout()
        stacksLayout.addWidget(self.leftStackMenu)

        menuWidget = QWidget()
        menuWidget.setStyleSheet('background-color: rgb(22,26,31);')
        menuWidget.setLayout(menuLayout)

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(menuWidget)
        mainLayout.addLayout(stacksLayout)
        mainLayout.addSpacerItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding))
        mainLayout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(mainLayout)
        #self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    #print('Currently used style:', app.style().metaObject().className())
    #print('Available styles:', QStyleFactory.keys())
    app.setStyle(QStyleFactory().create('windowsvista'))
    QFontDialog().getFont()
    loadingScreen = LoadingScren()
    sys.exit(app.exec_())

1 Ответ

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

Чтобы решить вашу проблему, нам нужно немного изменить ваш код.Сначала вы добавляете этот код строки self.setFont(QtGui.QFont("Ubuntu", 20, QtGui.QFont.Bold)) в class MenuButton().

Не забудьте показать главное окно, которое вы бы сделали, добавив этот код

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle(QtWidgets.QStyleFactory().create('windowsvista'))
    win = MainScreen()
    win.show()
    sys.exit(app.exec_())

Окно с правильным шрифтом после запуска

enter image description here

код

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

### Custom Classes

class MenuButton(QtWidgets.QPushButton):
    def __init__(self, caption):
        super(MenuButton, self).__init__()

        self.setFlat(True)
        self.setFont(QtGui.QFont("Ubuntu", 20, QtGui.QFont.Bold))
        self.setStyleSheet("color: rgb(85,170,255);")
        self.setText(caption)

    def select(self):
        self.setStyleSheet("color: rgb(255,255,255);")
    def deselect(self):
        self.setStyleSheet("color: rgb(85,170,255);")

class StackPage(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setStyleSheet('background-color: rgb(28,33,39)')
        self.layout = QtWidgets.QVBoxLayout()
        self.setLayout(self.layout)

class MainScreen(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(MainScreen, self).__init__(parent)

        #self.windowWidth = 500
        #self.windowHeight = 300

        self.icon = 'images\\system\\HashshashinLogo.png'
        self.title = 'DevOrder'

        self.fontFamily = 'Segoe UI' # Corbel | Sagoe UI
        self.fontColor = 'black'
        self.fontSize = '12'

        self.initUI()

    def initUI(self):

        self.setStyleSheet('font-family: %s; color: %s; background-color: rgb(28,33,39);' % (self.fontFamily, self.fontColor))
        self.setWindowTitle(self.title)
        self.setWindowIcon(QtGui.QIcon(self.icon))
        #self.setFixedSize(self.windowWidth, self.windowHeight)

        ### Top Menu

        def menubtnProjectsClicked():
            menubtnProjects.select()
            menubtnClients.deselect()
            menubtnUpdates.deselect()
            menubtnSettings.deselect()
            self.leftStackMenu.setCurrentIndex(0)
        def menubtnClientsClicked():
            menubtnProjects.deselect()
            menubtnClients.select()
            menubtnUpdates.deselect()
            menubtnSettings.deselect()
            self.leftStackMenu.setCurrentIndex(1)
        def menubtnUpdatesClicked():
            menubtnProjects.deselect()
            menubtnClients.deselect()
            menubtnUpdates.select()
            menubtnSettings.deselect()
            self.leftStackMenu.setCurrentIndex(2)
        def menubtnSettingsClicked():
            menubtnProjects.deselect()
            menubtnClients.deselect()
            menubtnUpdates.deselect()
            menubtnSettings.select()
            self.leftStackMenu.setCurrentIndex(3)

        menubtnProjects = MenuButton('Projects')
        menubtnProjects.clicked.connect(menubtnProjectsClicked)
        menubtnClients = MenuButton('Clients')
        menubtnClients.clicked.connect(menubtnClientsClicked)
        menubtnUpdates = MenuButton('Updates')
        menubtnUpdates.clicked.connect(menubtnUpdatesClicked)
        menubtnSettings = MenuButton('Settings')
        menubtnSettings.clicked.connect(menubtnSettingsClicked)

        ### Left Menu

        self.leftStackMenu = QtWidgets.QStackedWidget()
        self.leftStackMenu.setFixedWidth(500)

        leftProjectsPage = StackPage()
        leftProjectsPage.setStyleSheet('background-color: white;')
        leftClientsPage = StackPage()
        leftClientsPage.setStyleSheet('background-color: red;')
        leftUpdatesPage = StackPage()
        leftUpdatesPage.setStyleSheet('background-color: blue;')
        leftSettingsPage = StackPage()
        leftSettingsPage.setStyleSheet('background-color: yellow;')

        self.leftStackMenu.addWidget(leftProjectsPage)
        self.leftStackMenu.addWidget(leftClientsPage)
        self.leftStackMenu.addWidget(leftUpdatesPage)
        self.leftStackMenu.addWidget(leftSettingsPage)



        ### Placings

        menuLayout = QtWidgets.QHBoxLayout()
        menuLayout.setContentsMargins(50, 10, 10, 10)
        menuLayout.addWidget(menubtnProjects)
        menuLayout.addWidget(menubtnClients)
        menuLayout.addWidget(menubtnUpdates)
        menuLayout.addWidget(menubtnSettings)
        menuLayout.addSpacerItem(QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum))

        stacksLayout = QtWidgets.QHBoxLayout()
        stacksLayout.addWidget(self.leftStackMenu)

        menuWidget = QtWidgets.QWidget()
        menuWidget.setStyleSheet('background-color: rgb(22,26,31);')
        menuWidget.setLayout(menuLayout)

        mainLayout = QtWidgets.QVBoxLayout()
        mainLayout.addWidget(menuWidget)
        mainLayout.addLayout(stacksLayout)
        mainLayout.addSpacerItem(QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding))
        mainLayout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(mainLayout)
        #self.show()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle(QtWidgets.QStyleFactory().create('windowsvista'))
    win = MainScreen()
    win.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...