softland
Дек. 2, 2018 10:32:20
Начинаю простой проект, дипломная работа.
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
Дек. 2, 2018 11:30:03
softland
Но если я теперь выполню pyuic5, то потеряю все написанные мной обработчики
В смысле? Так ты давай осмысленные имена
всем элементам, не используя нумерацию вроде button1 button2. Используй buttonQuit, buttonStartProcess.
softland
Дек. 2, 2018 12:03:00
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
Дек. 2, 2018 12:58:36
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
Дек. 2, 2018 13:27:25
Вах. Всё просто!
Спасибо огромное.
А подскажите,
1. какую IDE вы используете?
2. автоподстановка в коде у Вас работает полностью, ваша IDE “знает” все методы QT?
3. мой VSC не проверяет написанный мной код на корректность. ошибки я получаю только на этапе выполнения. пример ниже
py.user.next
Дек. 2, 2018 15:16:31
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
Дек. 2, 2018 17:48:27
Не IDE а программируемый редактор Emacs хорошо, понятно.
Я имел в виду не то, есть там справка или нет, а то, что набрав
Емасs сам предложит список параметров, методов, констант - среди которых будет KeepAspectRatio?
И, что будет если Вы не глядя ни на что, наберёте keepAspectRatio? Когда вы узнаете что набрали метод не верно?
py.user.next
Дек. 3, 2018 01:46:15
softland
Емасs сам предложит список параметров, методов, констант - среди которых будет KeepAspectRatio?
У него есть модуль, который залазит в докстринги и через них выдаёт набор доступных имён. Это как если бы он сделал в консоли help(QtCore) и оно автоматически собрало всю информацию и имена все. То есть он выводит имя метода или класса и докстринг его.
softland
И, что будет если Вы не глядя ни на что, наберёте keepAspectRatio?
Я его не введу, потому что сначала думаю, что написать. А если будет опечатка, то при запуске оно в нем выпадет и я его сразу поправлю. Если же это чужой код, в котором куча опечаток, то, возможно, есть средства автоматического переименовывания. Но обычно, когда чужой код беру, я через выпадения нахожу неправильные идентификаторы и исправляю их по памяти или по справке.
softland
Дек. 3, 2018 09:54:55
Спасибо.
py.user.next
А если будет опечатка, то при запуске оно в нем выпадет и я его сразу поправлю.
Я правильно понимаю,
перед запуском скрипта он ВЕСЬ будет автоматически проверен на корректность…
Вот пример того как отображает ошибку VSC после команды save
Именно этого я не вижу сейчас у себя в проекте python
Может кто подсказать, как заставить VCS делать полноценное автодополнение кода python и проверять на наличие синтаксических ошибок. Количество расширений огромное, пробовать каждое очень долго и есть вероятность найти первое попавшееся но не оптимальное…
py.user.next
Дек. 3, 2018 11:06:58
softland
Я правильно понимаю, перед запуском скрипта он ВЕСЬ будет автоматически проверен на корректность…
Нет. Просто запускаешь, он выпадает и информирует тебя о том, что произошло. Это если наскоряк делать. А вообще это делается в юнит-тестах, которые запускают все функции, а потом выводят все места, где ошибки произошли. Так ты можешь один раз запустить, получить десять ошибок и исправить их все. Потом запускаешь, все тесты прошли - ok, дальше пишешь программу.