1). Проблема в том, что при изменении размера шрифта ничего не происходит. Как думаете, в чём моя ошибка?
2). Актуален вопрос про список шрифтов
——
По работе программы:
Левый ЛистВью содержит список всех шрифтов ОСи, в правый ЛистВью попадают шрифты для сравнения (нажатие по шрифту во втором списке удаляет элемент данного списка).
# Python 3 #!/usr/bin/env python # -*- coding: utf-8 -*- version = '2017.11.25' # Начало разработки import sys, os from PyQt4 import QtCore, QtGui from PyQt4.QtGui import (QWidget, qApp, QAction, QApplication, QHBoxLayout, QVBoxLayout, QGridLayout, QLabel, QLineEdit, QTextEdit, QPushButton, QComboBox, QCheckBox, QRadioButton, QFrame, QScrollArea, QTabWidget, QSizePolicy, QGroupBox, QFileDialog, QMainWindow, QPlainTextEdit, QStandardItem, QStandardItemModel, QListView, QListWidget, QFontComboBox, QFontDatabase) from PyQt4.QtGui import QIcon, QPixmap, QPalette, QTextCursor from PyQt4.QtCore import QSize # ЦВЕТА ПОЛЕЙ sss_vivod = ("background-color: #456173; color: #f2f2f0; font: 14pt") # ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ path_dir = '' # путь основного каталога path_f = '' # путь открытого файла # ГРАФИКА class Window(QMainWindow): def __init__(self, parent=None, *args, **kwargs): QMainWindow.__init__(self, parent) super().__init__(parent, QtCore.Qt.Window) self.setMinimumSize(400, 300) # Ширина и высота окна self.resize(500, 500) # шир / выс окна self.setWindowTitle('Сравнение шрифтов – '+version) # Заголовок self.setWindowIcon(QIcon('icon.png')) # Иконка # ПОДКЛЮЧЕНИЕ СТИЛЕЙ '''sss = open('res/dark_blue.stylesheet', 'r') self.styleData = sss.read() sss.close() self.setStyleSheet(self.styleData)''' # Статус бар self.statusBar() # Пункты меню m_open_dir = QAction(QIcon('res_picture/apple_green.png'), 'Открыть директорию', self) #m_open_dir.triggered.connect(self.open_dir) m_settings = QAction(QIcon('res_picture/apple_green.png'), 'Настройки', self) #m_settings.triggered.connect(self.settings) # Меню программы menubar = self.menuBar() file_1 = menubar.addMenu('&Файл') file_1.addAction(m_open_dir) file_1.addAction(m_settings) file_2 = menubar.addMenu('&О программе') file_2.addAction('О программе') # БЛОК РАЗМЕТКИ grid_os = QGridLayout() # создание сетки grid_os.setSpacing(5) m = 6 # всего столбцов # --- --- self.pole_1 = QLineEdit() self.pole_1.setPlaceholderText('Введите текст') grid_os.addWidget(self.pole_1, 0,0,1,m-2) self.box_size = QComboBox() self.box_size.addItems(['10','12','14','16','18','20','28','40']) self.box_size.setCurrentIndex(5) self.box_size.setToolTip('Выбрать размер шрифта') self.box_size.activated[str].connect(self.on_start) #self.box_size.currentIndexChanged.connect(self.on_start) grid_os.addWidget(self.box_size, 0,m-2) self.button_vvod = QPushButton('Ввод') self.button_vvod.clicked.connect(self.on_start) grid_os.addWidget(self.button_vvod, 0,m-1) # --- --- lbl_1 = QLabel('<center>+ шрифт</center>') grid_os.addWidget(lbl_1, 1,0) lbl_2 = QLabel('<center>– шрифт</center>') grid_os.addWidget(lbl_2, 1,1) lbl_3 = QLabel('<center>Результат</center>') grid_os.addWidget(lbl_3, 1,2,1,m-2) # --- --- self.list_view_1 = QListView() grid_os.addWidget(self.list_view_1, 2,0) self.list_view_2 = QListView() self.list_view_2.clicked.connect(self.on_del) grid_os.addWidget(self.list_view_2, 2,1) self.pole_vivod = QTextEdit('') self.pole_vivod.setStyleSheet(sss_vivod) grid_os.addWidget(self.pole_vivod, 2,2,1,m-2) # --- --- self.box_font = QFontComboBox() #self.box_font.setToolTip('Выбрать шрифт') #self.box_font.activated[str].connect(self.on_start) #grid_os.addWidget(self.box_font, 3,0) # настройка grid_os.setColumnStretch(2, 1) # расширение правой части; индекс/растяж grid_os.setColumnMinimumWidth(3,200) # --- frame_os = QFrame() frame_os.setFrameShape(1) frame_os_lay = QVBoxLayout(frame_os) frame_os_lay.addLayout(grid_os) self.setCentralWidget(frame_os) # ==================== self.lst_1 = [] self.lst_2 = [] self.model_list_2 = None self.on_start() self.on_start_lst_1() # ЛОГИКА def on_start(self): def aps(i): # aps(список) i = ''.join(map(str, i)) data.append(str(i)) data = [] self.pole_vivod.setText('') # ДАННЫЕ text = self.pole_1.text() if text == '': text = 'Введите текст' siz = int(self.box_size.currentText()) print(siz) # ХОД for i in range(len(self.lst_2)): aps(['<font face="',self.lst_2[i],'" size=',siz,'>',text,'</font>', '<br>(',self.lst_2[i],')']) # ВЫВОД ОТЧЁТОВ self.pole_vivod.setText('<hr>'.join(data)) print('<br>'.join(data)) self.pole_vivod.moveCursor(QTextCursor.Start) def on_start_lst_1(self): # формирование первого списка self.box_font for i in range(len(self.box_font)): self.lst_1.append(self.box_font.itemText(i)) # из комбобокса model_list_1 = QStandardItemModel(self.list_view_1) for i in range(len(self.lst_1)): item = QStandardItem(self.lst_1[i]) model_list_1.appendRow(item) self.list_view_1.setModel(model_list_1) self.list_view_1.clicked.connect(self.on_in_lst_2) def on_in_lst_2(self): # отправить в список 2 index_row_1 = self.list_view_1.currentIndex().row() self.lst_2.append(self.lst_1[index_row_1]) self.lst_2.sort() self.model_list_2 = QStandardItemModel(self.list_view_2) for i in range(len(self.lst_2)): item = QStandardItem(self.lst_2[i]) self.model_list_2.appendRow(item) self.list_view_2.setModel(self.model_list_2) self.on_start() def on_del(self): # удалить шрифт из второго списка index_row_2 = self.list_view_2.currentIndex().row() self.lst_2.pop(index_row_2) self.model_list_2.takeRow(index_row_2) # удалить строку из модели self.list_view_2.setModel(self.model_list_2) # установить новую модель self.on_start() # обновить поле вывода # КОНЕЦ if __name__ == "__main__": app = QApplication(sys.argv) window = Window() # создаёт экземпляр окна из класса window.move(40, 20) # сдвиг окна от верхнего левого угла экрана window.show() # запускает окно sys.exit(app.exec_())