Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Почему не меняется размер шрифта в QTextEdit [RSS Feed]

#1 Ноя. 26, 2017 12:55:49

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

Почему не меняется размер шрифта в QTextEdit

Написал программу для сравнения шрифтов (см. скриншот).



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_())
    

Отредактировано Kyrym (Ноя. 26, 2017 12:56:56)

Прикреплённый файлы:
attachment Сравнение шрифтов – 2017.11.25_005.png (143,9 KБ)

Офлайн

#2 Ноя. 28, 2017 18:13:26

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Почему не меняется размер шрифта в QTextEdit

мда, конечно радует что вы освоили метод строк join, а теперь откройте для себя еще и format , тогда вот этот ужас:

 def aps(i): # aps(список)   
            i = ''.join(map(str, i))
            data.append(str(i))
....
for i in range(len(self.lst_2)):
            aps(['<font face="',self.lst_2[i],'" size=',siz,'>',text,'</font>','<br>(',self.lst_2[i],')'])
можно заменить на чтото типа такого
         for i in range(len(self.lst_2)):
            data.append('<font face="{}", size={}>{}</font><br>({})'.format(self.lst_2[i], siz, text, self.lst_2[i]))
Kyrym
Проблема в том, что при изменении размера шрифта ничего не происходит. Как думаете, в чём моя ошибка?
ошибка в том что это не размер в точках(pt), а ХЗ вобщем в чем… но это что-то имеет градацию размера от 1 до 7 , и если значение больше 7 оно более не увеличивает.
установите
 self.box_size.addItems(['1','2','3','4','5','6','7','8', '9'])
чтобы убедиться в этом.

зачем вы переводите в int?
 siz = int(self.box_size.currentText())
вы же следующей строякой его опять в строку преобразовываете..



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Ноя. 28, 2017 18:14:08)

Офлайн

#3 Ноя. 28, 2017 20:19:33

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

Почему не меняется размер шрифта в QTextEdit

PEHDOM
зачем вы переводите в int?
Так я хотел избежать лишних кавычек, хотя, как выяснилось, их итак не будет.
PEHDOM
ошибка в том что это не размер в точках(pt), а ХЗ вобщем в чем… но это что-то имеет градацию размера от 1 до 7
Да, забыл я об этом. Переписал код через “p style”. Теперь работает, как задумано.
PEHDOM
а теперь откройте для себя еще и format
Про формат я знаю, просто мне как-то не сильно с ним удобно. Хотя конкретно в данном случае - да, format упростит общую конструкцию.
 # Python 3
#!/usr/bin/env python
# -*- coding: utf-8 -*-
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;")
# ГРАФИКА
        
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(800, 500) # шир / выс окна
        self.setWindowTitle('Сравнение шрифтов – '+version) # Заголовок
        self.setWindowIcon(QIcon('icon.png')) # Иконка
        # Статус бар
        self.statusBar()
        # Меню программы
        menubar = self.menuBar()
        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','60'])
        self.box_size.setCurrentIndex(6)
        self.box_size.setToolTip('Выбрать размер шрифта')
        self.box_size.activated[str].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)
        # --- ---
 
        # настройка
        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):
        text = self.pole_1.text()
        if text == '':
            text = 'Введите текст'
        siz = self.box_size.currentText() # размер шрифта
        #print(siz)
        data = []
        for i in range(len(self.lst_2)):
            data.append('<p style="font-family:{}; font-size:{}px; margin-top:0px; margin-bottom:0px">{}</p>\
                         <p style="font-size:14px; margin-top:0px; margin-bottom:0px">({})</p>\
                         '.format(self.lst_2[i], siz, text, 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): # формирование первого списка
        obj_font = QtGui.QFontDatabase() # объект класса базы шрифтов
        self.lst_1 = obj_font.families() # list_font
        
        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()
        row_1 = self.lst_1[index_row_1]
        if self.lst_2.count(row_1) == 1: # не допустить повторы
            pass
        else:
            self.lst_2.append(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_())
    



Отредактировано Kyrym (Ноя. 28, 2017 20:34:17)

Офлайн

  • Начало
  • » GUI
  • » Почему не меняется размер шрифта в QTextEdit[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version