Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Начало учебного проекта. Выбор библиотеки GUI [RSS Feed]

#1 Дек. 2, 2018 10:32:20

softland
Зарегистрирован: 2018-12-01
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Начало учебного проекта. Выбор библиотеки GUI

Начинаю простой проект, дипломная работа.
GUI несёт подчинённый характер и не должен мешать работе.
Подскажите какой enviroment собрать, какую библиотеку, какую IDE использовать?

Интерфейс будет нужен простой, но и не 3 lineEdit'a
Очень хочется делать интерфейс не написанием кода а form editor'ом. Любым, не обязательно qt

Сейчас установлен Visual Studio Code, pyQt5
Простой пример работает:
- в qtDesigner сделал форму, конвертнул её в python код
- открыл в VSC и дописал обработку событий. Запустил = работает
- вернулся в qtDesigner, поменял форму и сохранил ui
! Но если я теперь выполню pyuic5, то потеряю все написанные мной обработчики

Вопрос насущный, просьба не переводить в холивар между qt и gtk
Мне надо решить утилитарную проблему. Иметь возможность под Windows интерфейс к своей программе, и желательно делать его не путем изучения джанго или qml, а с минимальными затратами.
Накидал, вывел результаты, поменял рамочки/цвета, вывел заново, добавил чек-бокс, вывел… Добавил график, вывел. Ну вот и получилось.

Отредактировано softland (Дек. 2, 2018 10:40:07)

Офлайн

#2 Дек. 2, 2018 11:30:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8553
Репутация: +  764  -
Профиль   Отправить e-mail  

Начало учебного проекта. Выбор библиотеки GUI

softland
Но если я теперь выполню pyuic5, то потеряю все написанные мной обработчики
В смысле? Так ты давай осмысленные имена всем элементам, не используя нумерацию вроде button1 button2. Используй buttonQuit, buttonStartProcess.



Отредактировано py.user.next (Дек. 2, 2018 11:30:49)

Офлайн

#3 Дек. 2, 2018 12:03:00

softland
Зарегистрирован: 2018-12-01
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Начало учебного проекта. Выбор библиотеки GUI

1        self.statusbar.setObjectName("statusbar") 
2 MainWindow.setStatusBar(self.statusbar)
3
4 self.btnSelectImage.clicked.connect(self.setImage) #строка написанная мной
5 self.btnAdd.clicked.connect(self.addItem) #строка написанная мной
Сооветственно, после выполнения pyuic5 получу новый файл “py” в котором не будет строк 4 и 5
и самих функций setImage и addItem. Хоть какие названия я дам btnAdd и btnSelectImage.

команда
pyuic5 -x “main.ui” -o “main.py”
заменяет main.py на новый, после неё содержимое старого main.py будет удалено.
Можно его до выполнения команды сохранить и потом ручками copy/past все свои строчки перенести в новый… но это мазохизм какой-то

Отредактировано softland (Дек. 2, 2018 12:03:27)

Офлайн

#4 Дек. 2, 2018 12:58:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8553
Репутация: +  764  -
Профиль   Отправить e-mail  

Начало учебного проекта. Выбор библиотеки GUI

softland
Сооветственно, после выполнения pyuic5 получу новый файл “py” в котором не будет строк 4 и 5
и самих функций setImage и addItem. Хоть какие названия я дам btnAdd и btnSelectImage.
Так не надо в нём ничего писать. Его надо просто импортировать и установить как интерфейс окна. А писать уже всё надо в этом окне, которое к форме никак не относится.

softland
команда
pyuic5 -x “main.ui” -o “main.py”
mainwindow.ui преобразуется в mainwindow.py
А потом в main.py ты импортируешь модуль mainwindow из текущей директории. Так ты получаешь доступ к тому классу пользовательского интерфейса. Потом от того класса наследуешь класс главного окна и запускаешь настройку интерфейса. Эти примеры в инете лежат.

Со своей проги
  
...
 
from mainwindow import Ui_MainWindow
 
class App(QMainWindow, Ui_MainWindow):
 
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.setup_ui()
        self.center()
        self.show()
 
    def center(self):
        rect = self.frameGeometry()
        best_position = QDesktopWidget().availableGeometry().center()
        rect.moveCenter(best_position)
        self.move(rect.topLeft())
 
    def setup_ui(self):
        self.setup_ui_menu()
        self.setup_ui_statusbar()
        self.setup_ui_control_buttons()
        self.setup_ui_iprange_frame()
        self.setup_ui_ports_frame()
...



Отредактировано py.user.next (Дек. 2, 2018 13:08:40)

Офлайн

#5 Дек. 2, 2018 13:27:25

softland
Зарегистрирован: 2018-12-01
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Начало учебного проекта. Выбор библиотеки GUI

Вах. Всё просто!
Спасибо огромное.

А подскажите,
1. какую IDE вы используете?
2. автоподстановка в коде у Вас работает полностью, ваша IDE “знает” все методы QT?
3. мой VSC не проверяет написанный мной код на корректность. ошибки я получаю только на этапе выполнения. пример ниже

Офлайн

#6 Дек. 2, 2018 15:16:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8553
Репутация: +  764  -
Профиль   Отправить e-mail  

Начало учебного проекта. Выбор библиотеки GUI

softland
какую IDE вы используете?
Emacs (не IDE, а программируемый редактор)

softland
автоподстановка в коде у Вас работает полностью, ваша IDE “знает” все методы QT?
В Emacs можно сделать подсказки, но я использую Qt Assistant, в котором есть полная справка по всем классам Qt.
http://www.imageup.ru/img3/3226696/qtassist-keepaspect.jpg.html

  
>>> PyQt5.Qt.Qt.KeepAspectRatio
1
>>>



Отредактировано py.user.next (Дек. 2, 2018 15:26:42)

Офлайн

#7 Дек. 2, 2018 17:48:27

softland
Зарегистрирован: 2018-12-01
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Начало учебного проекта. Выбор библиотеки GUI

Не IDE а программируемый редактор Emacs хорошо, понятно.
Я имел в виду не то, есть там справка или нет, а то, что набрав

QtCore.Qt.
Емасs сам предложит список параметров, методов, констант - среди которых будет KeepAspectRatio?
И, что будет если Вы не глядя ни на что, наберёте keepAspectRatio? Когда вы узнаете что набрали метод не верно?

Офлайн

#8 Дек. 3, 2018 01:46:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8553
Репутация: +  764  -
Профиль   Отправить e-mail  

Начало учебного проекта. Выбор библиотеки GUI

softland
Емасs сам предложит список параметров, методов, констант - среди которых будет KeepAspectRatio?
У него есть модуль, который залазит в докстринги и через них выдаёт набор доступных имён. Это как если бы он сделал в консоли help(QtCore) и оно автоматически собрало всю информацию и имена все. То есть он выводит имя метода или класса и докстринг его.

softland
И, что будет если Вы не глядя ни на что, наберёте keepAspectRatio?
Я его не введу, потому что сначала думаю, что написать. А если будет опечатка, то при запуске оно в нем выпадет и я его сразу поправлю. Если же это чужой код, в котором куча опечаток, то, возможно, есть средства автоматического переименовывания. Но обычно, когда чужой код беру, я через выпадения нахожу неправильные идентификаторы и исправляю их по памяти или по справке.



Отредактировано py.user.next (Дек. 3, 2018 01:46:46)

Офлайн

#9 Дек. 3, 2018 09:54:55

softland
Зарегистрирован: 2018-12-01
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Начало учебного проекта. Выбор библиотеки GUI

Спасибо.

py.user.next
А если будет опечатка, то при запуске оно в нем выпадет и я его сразу поправлю.
Я правильно понимаю, перед запуском скрипта он ВЕСЬ будет автоматически проверен на корректность…
Вот пример того как отображает ошибку VSC после команды save

Именно этого я не вижу сейчас у себя в проекте python

Может кто подсказать, как заставить VCS делать полноценное автодополнение кода python и проверять на наличие синтаксических ошибок. Количество расширений огромное, пробовать каждое очень долго и есть вероятность найти первое попавшееся но не оптимальное…

Офлайн

#10 Дек. 3, 2018 11:06:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8553
Репутация: +  764  -
Профиль   Отправить e-mail  

Начало учебного проекта. Выбор библиотеки GUI

softland
Я правильно понимаю, перед запуском скрипта он ВЕСЬ будет автоматически проверен на корректность…
Нет. Просто запускаешь, он выпадает и информирует тебя о том, что произошло. Это если наскоряк делать. А вообще это делается в юнит-тестах, которые запускают все функции, а потом выводят все места, где ошибки произошли. Так ты можешь один раз запустить, получить десять ошибок и исправить их все. Потом запускаешь, все тесты прошли - ok, дальше пишешь программу.



Отредактировано py.user.next (Дек. 3, 2018 11:07:11)

Офлайн

  • Начало
  • » GUI
  • » Начало учебного проекта. Выбор библиотеки GUI[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version