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

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

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

Вопрос насущный, просьба не переводить в холивар между qt и gtk
Мне надо решить утилитарную проблему. Иметь возможность под Windows интерфейс к своей программе, и желательно делать его не путем изучения джанго или qml, а с минимальными затратами.
Накидал, вывел результаты, поменял рамочки/цвета, вывел заново, добавил чек-бокс, вывел… Добавил график, вывел. Ну вот и получилось.
py.user.next
softland
Но если я теперь выполню pyuic5, то потеряю все написанные мной обработчики
В смысле? Так ты давай осмысленные имена всем элементам, не используя нумерацию вроде button1 button2. Используй buttonQuit, buttonStartProcess.
softland
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 все свои строчки перенести в новый… но это мазохизм какой-то
py.user.next
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()
...
softland
Вах. Всё просто!
Спасибо огромное.

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

py.user.next
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
>>>
softland
Не IDE а программируемый редактор Emacs хорошо, понятно.
Я имел в виду не то, есть там справка или нет, а то, что набрав
QtCore.Qt.
Емасs сам предложит список параметров, методов, констант - среди которых будет KeepAspectRatio?
И, что будет если Вы не глядя ни на что, наберёте keepAspectRatio? Когда вы узнаете что набрали метод не верно?
py.user.next
softland
Емасs сам предложит список параметров, методов, констант - среди которых будет KeepAspectRatio?
У него есть модуль, который залазит в докстринги и через них выдаёт набор доступных имён. Это как если бы он сделал в консоли help(QtCore) и оно автоматически собрало всю информацию и имена все. То есть он выводит имя метода или класса и докстринг его.

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

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

Может кто подсказать, как заставить VCS делать полноценное автодополнение кода python и проверять на наличие синтаксических ошибок. Количество расширений огромное, пробовать каждое очень долго и есть вероятность найти первое попавшееся но не оптимальное…
py.user.next
softland
Я правильно понимаю, перед запуском скрипта он ВЕСЬ будет автоматически проверен на корректность…
Нет. Просто запускаешь, он выпадает и информирует тебя о том, что произошло. Это если наскоряк делать. А вообще это делается в юнит-тестах, которые запускают все функции, а потом выводят все места, где ошибки произошли. Так ты можешь один раз запустить, получить десять ошибок и исправить их все. Потом запускаешь, все тесты прошли - ok, дальше пишешь программу.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB