Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 08.12.2023
Сообщений: 20

Неприятные изменения размеров формы

10.12.2023, 23:06. Показов 2383. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю проект "кредитный калькулятор" в программе Qt Designer.

Сделал весь интерфейс в Qt Designer. Для MainWindow поставил в программе фиксированный размер 651x510, потом подогнал все остальные элементы в это окно по размеру(они без максимального размера, но их нельзя дви. В итоге, после преобразования кода, получившегося после сохранения проекта в Qt Designer, из формата .ui в .py, я его запустил в программе PyCharm. Вылезло окно, которое гораздо меньше, чем было в QtDesigner и весь интерфейс стал непонятным.

Как это исправить?

1 картинка: окно в Qt Designer; 2 картинка: окно после запуска кода в PyCharm
Миниатюры
Неприятные изменения размеров формы   Неприятные изменения размеров формы  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.12.2023, 23:06
Ответы с готовыми решениями:

Рисование окружности с возможностью изменения размеров
Доброго времени суток. Как можно реализовать рисование окружности, чтобы это выглядело как в paint? То есть при изменении размера, она не...

Масштабирование размеров формы PYQT5
Доброго дня! Проблема такова. Создаю форму в pyQdesigner размерами 1024х768(ФИКСИРОВАНО). Вроде всё красиво, и при предпросмотре тоже...

Не выполняется событие после изменения размеров формы
Создаю на форме динамический Label Label text = new Label(); ... this.Controls.Add(text); И...

15
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
10.12.2023, 23:19
Надо не абсолютными величинами оперировать, а использовать менеджеры компоновки, ака FormLayout, VBoxLayout, HBoxLayout и т.д. С соответствующими относительными выравниваниями внутри них.
И не в дизайнере, а кодом.
3
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
11.12.2023, 00:23
Max1580, дам я вам совет:
сделайте форму в дизайнере и потом напишите ее же кодом сами, иначе так и будете путаться
1
0 / 0 / 0
Регистрация: 08.12.2023
Сообщений: 20
11.12.2023, 01:26  [ТС]
Вы имеете ввиду с уже созданными виджетами в Qt Designer самому оперировать над кодом, подстраивая размеры виджетов под окно?

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

Добавлено через 10 минут
А есть какая-то команда, которая подстраивает размеры окна под компьютер, с которого запущена программа? А то мне нужно, чтобы размеры окна подстраивались под каждый компьютер, так как данный код будет запускаться не только на моем компе.

Я правильно понимаю, что в самом дизайнере размеры, которые вводишь не совпадают с разрешением экрана компьютера? Просто не совсем понятно, почему при заданных размерах окна в дизайнере и после запуска этого кода в PyCharm-е у меня различаются размеры открываемых окон.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
11.12.2023, 01:43
почитайте Прохоренка хотя бы, в сети доступен
я пример дам как я это делаю
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class View(QMainWindow):
    def __init__(self,parent=None):
        super().__init__(parent)
        self.view = QTableView()
        self.view.horizontalHeader().setSectionResizeMode(1)
        self.view.verticalHeader().setSectionResizeMode(3)
        self.model = QSqlQueryModel()
        self.view.setModel(self.model)
        self.boxTable = QComboBox()
        self.boxTable.activated.connect(self.on_table)
        self.boxQuery = QComboBox()
        self.boxQuery.setEditable(True)
        self.boxQuery.lineEdit().setPlaceholderText('Введите SQL запрос и нажмите Return')
        self.boxQuery.lineEdit().returnPressed.connect(self.on_line)
        btnOpen = QPushButton("Open")
        btnOpen.clicked.connect(self.open_file)
        w = QWidget()
        grid = QGridLayout(w)
        grid.setContentsMargins(0,0,0,0)
        grid.addWidget(self.view,0,0,10,10)
        grid.addWidget(self.boxTable,10,0,1,2)
        grid.addWidget(self.boxQuery,10,2,1,8)
        grid.addWidget(btnOpen,10,9,1,1)
        self.setCentralWidget(w)
Миниатюры
Неприятные изменения размеров формы  
1
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
11.12.2023, 12:43
Max1580, попробуйте поискать решения на форуме. Вы же не первый кого озадачили "прелести" Qt Designer-а Тут примеров-то много разных. Нв форуме при открытии темы даже подсказки предлагаются экспертами Programming и IT_Exp. Конечно, увидеть их могут только анонимные пользователи (как ни страннно ), но ведь ни что не мешает открыть текущую тему, не регистрируясь на форуме.

Отрицать Qt Designer, наверное, не продуктивно - инструмент, как инструмент, научиться пользоваться можно, но, блин, порой вгоняет в состояние перманентного изумления неоднозначностью приёмов Понять что, как и в какой последовательности надо делать - задача весьма нетривиальная...

На крайнмй случай, могу предложить совсем элементарный пример подвижного дизайна в моём исполнении Виджеты растягиваются Можете попробовать повторить с нуля для начала.

Ну и блоги не мешает прошерстить. Я-то туда всякий неформат сливаю, пытаясь разобраться с вывертами Python и PyQt, но, наверняка, были, есть и будут люди, которые делают это лучше.
2
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
11.12.2023, 21:00
Дизайнер хорош когда в QtCreator в С++ работаешь, там он интегрирован, да и то я им пользовался больше посмотреть на дизайн формы
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
11.12.2023, 22:44
Max1580, в принципе, тут свободного времени появилось маленько и черновой-то вариант дизайна под Вашу задачу всё-таки народился. Наверное, так оно всё может выглядеть:

crd_calc.ui:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>582</width>
    <height>499</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QHBoxLayout" name="horizontalLayout">
   <item>
    <layout class="QVBoxLayout" name="verticalLayout">
     <item>
      <widget class="QLabel" name="label">
       <property name="text">
        <string>Выберите вариант расчёта:</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QTabWidget" name="tabWidget">
       <property name="currentIndex">
        <number>0</number>
       </property>
       <widget class="QWidget" name="tab">
        <attribute name="title">
         <string>Ежемесячный платёж, рубли</string>
        </attribute>
        <layout class="QHBoxLayout" name="horizontalLayout_2">
         <item>
          <widget class="QGroupBox" name="">
           <property name="title">
            <string>Параметры кредита</string>
           </property>
           <layout class="QVBoxLayout" name="verticalLayout_2">
            <item>
             <widget class="QLabel" name="label_2">
              <property name="text">
               <string>Сумма кредита, рубли</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QSpinBox" name="spinBox"/>
            </item>
            <item>
             <widget class="QLabel" name="label_3">
              <property name="text">
               <string>Срок кредита, месяцы</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QSpinBox" name="spinBox_2">
              <property name="minimum">
               <number>1</number>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QLabel" name="label_4">
              <property name="text">
               <string>Процентная ставка, %</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QSpinBox" name="spinBox_3"/>
            </item>
           </layout>
          </widget>
         </item>
         <item>
          <widget class="QGroupBox" name="">
           <property name="title">
            <string>Дополнительные параметры</string>
           </property>
           <layout class="QVBoxLayout" name="verticalLayout_3">
            <item>
             <widget class="QLabel" name="label_5">
              <property name="text">
               <string>Первоначальный взнос, рубли</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QSpinBox" name="spinBox_5"/>
            </item>
            <item>
             <widget class="QLabel" name="label_6">
              <property name="text">
               <string>Обслуживание, %</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QSpinBox" name="spinBox_4"/>
            </item>
            <item>
             <widget class="QLabel" name="label_7">
              <property name="text">
               <string>Тип комиссионных платежей</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QRadioButton" name="radioButton">
              <property name="text">
               <string>Аннуитентные</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QRadioButton" name="radioButton_2">
              <property name="text">
               <string>Дифференцированные</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QPushButton" name="pushButton">
              <property name="text">
               <string>Расчитать</string>
              </property>
             </widget>
            </item>
           </layout>
          </widget>
         </item>
        </layout>
       </widget>
       <widget class="QWidget" name="tab_2">
        <attribute name="title">
         <string>Tab 2</string>
        </attribute>
       </widget>
      </widget>
     </item>
     <item>
      <widget class="QTableWidget" name="tableWidget">
       <property name="rowCount">
        <number>2</number>
       </property>
       <property name="columnCount">
        <number>6</number>
       </property>
       <row/>
       <row/>
       <column>
        <property name="text">
         <string>Месяц</string>
        </property>
       </column>
       <column>
        <property name="text">
         <string>Плановый платёж</string>
        </property>
       </column>
       <column>
        <property name="text">
         <string>Проценты</string>
        </property>
       </column>
       <column>
        <property name="text">
         <string>Обслуживание</string>
        </property>
       </column>
       <column>
        <property name="text">
         <string>New Column</string>
        </property>
       </column>
       <column/>
      </widget>
     </item>
    </layout>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>
Хоть навыки свои подзабытые обновил
1
0 / 0 / 0
Регистрация: 08.12.2023
Сообщений: 20
12.12.2023, 23:08  [ТС]
получается, мне нужно по новой код писать?
я не смогу сделать так как у меня есть, только размеры сделать с относительными выравниваниями?

Добавлено через 13 минут
или это можно в дизайнере самом сделать, подогнав все нужные элементы в Layout-ы?
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
13.12.2023, 01:02
размер задать можно в рантайме
Python
1
2
3
4
5
6
if __name__=="__main__":
    app = QApplication([])
    v = View()
    v.resize(800,600) #размер онка
    v.show()
    app.exec_()
1
0 / 0 / 0
Регистрация: 08.12.2023
Сообщений: 20
13.12.2023, 01:09  [ТС]
vic5710, вы iamvic?
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
13.12.2023, 01:15
Цитата Сообщение от Max1580 Посмотреть сообщение
vic5710, вы iamvic?
нет я vic5710
0
0 / 0 / 0
Регистрация: 08.12.2023
Сообщений: 20
13.12.2023, 01:27  [ТС]
iamvic, я попробовал вставить ваш код в Qt Designer, чтобы посмотреть как он визуально отличается от моего.
В итоге я понял, что вся проблема в Layout-ах. Я начал уже в самом дизайнере добавлять варианты расчета в мой QTabWidget. Всё настроил, а потом смотрю, у меня 1 вариант расчета с Lay Out Horizontally, а остальные два варианта расчета с Break Lay Out(на картинке). Я глянул мой проблемный проект, оказывается, там такая же история, поэтому думаю, что если щас опять запущу этот код в питоне, то у меня все размеры полетят.

Не могли бы вы сделать такой же код как кидали, только с тремя вариантами расчета, а не одним, и чтобы у каждого были LayOut-ы? А то я не совсем понимаю как это прописать на ui. А в самом дизайнере пытаюсь поменять LayOut двух других вариантов расчета, в итоге ничего не меняется. Я для проверки еще один вариант расчета сделал, так это сам дизайнер при создании новой странички в QTabWidget делает её автоматически без Lay Out-a. Походу это только в коде можно прописать, как вы сделали...
Миниатюры
Неприятные изменения размеров формы  
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
13.12.2023, 23:07
Лучший ответ Сообщение было отмечено Max1580 как решение

Решение

Цитата Сообщение от Max1580 Посмотреть сообщение
Походу это только в коде можно прописать, как вы сделали...
В каком коде и что можно прописать? Файл дизайна crd_calc.ui сделан штатными средствами Qt Designer. Ничего там отдельно прописывать не требуется - ни руками, ни другими приспособлениями. А если имелось ввиду отсутствие примера исполнительного кода, то давайте исправим этот недостаток:

crd_calc.py:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
# Credit Calculator
import sys
from PyQt5 import (
    QtWidgets,
    uic
    )
 
class Credit_calculator(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Credit_calculator, self).__init__(parent)
        uic.loadUi('crd_calc.ui', self)
 
    def on_pushButton_pressed(self):
        tab_w = self.findChild(QtWidgets.QTabWidget, 'tabWidget')
        QtWidgets.QMessageBox.information(
            self,
            'Информация',
            'Нажата кнопка <b>{!s}</b> на вкладке <b>{!s}</b>.'
            ''.format(
                self.sender().text(),
                tab_w.tabText(tab_w.currentIndex())
                )
            )
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
 
    mwin = Credit_calculator()
    mwin.show()
    sys.exit(app.exec_())
1
0 / 0 / 0
Регистрация: 08.12.2023
Сообщений: 20
13.12.2023, 23:55  [ТС]
iamvic, я взял ваш код, закинул его в Qt Designer, потом добавил еще 2 варианта расчёта в QTabWidget. Они у меня создаются автоматически без LayOut-ов. В итоге первый вариант расчёта, который вы мне скинули, правильно расставляет элементы внутри себя (1-ый скрин), а второй и третий (которые я добавил в ваш код) расставляют элементы как на втором скрине.

Это нужно было прописывать в коде, чтобы у меня была правильная расстановка, а потом закидывать в дизайнер? Или можно было как-то сделать без кода?
Миниатюры
Неприятные изменения размеров формы   Неприятные изменения размеров формы  
0
0 / 0 / 0
Регистрация: 08.12.2023
Сообщений: 20
14.12.2023, 02:17  [ТС]
все, я разобрался, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.12.2023, 02:17
Помогаю со студенческими работами здесь

Пропадает нарисованная окружность после изменения размеров формы
Здравствуйте, рисую круг на форме заданного размера. Он выводится (Рисунок-1), но если я сожму окно (Рисунок-2), а после разожму его снова,...

Отключить границы формы, но оставить возможность изменения размеров
Существует ли возможность выключить границы у формы, но при этом оставить возможность изменения её размеров помощью мыши?

WM_GETMINMAXINFO. Как уменьшить мерцание формы во время изменения её размеров?
Кто нибудь пользовался сообщением WM_GETMINMAXINFO для изменения размеров окна формы? Как уменьшить мерцание формы во время изменения её...

WM_GETMINMAXINFO. Как уменьшить мерцание формы во время изменения её размеров?
Кто нибудь пользовался сообщением WM_GETMINMAXINFO для изменения размеров окна формы? Как уменьшить мерцание формы во время изменения её...

Изменение размеров child без изменения размеров parenta
Доброго дня всем! Прошу помощи, сама не догадалась как тут быть. Суть в следующем : есть таблица, ее создаем динамически, в каждую ячейку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru