Latest posts on Начало учебного проекта. Выбор библиотеки GUI topichttps://python.su/forum/topic/36370/2018-12-03T13:46:59+02:00Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-03T13:46:59+02:00py.user.next197645<blockquote><em>softland</em><br/>как ошибку в “Qt.keepAspectRatio” можно обнаружить НЕ “руками”, не покликав в диалоге выбора файла</blockquote>Надо это окно диалога QtWidgets.QFileDialog.getOpenFileName() заменить на мок-объект и вернуть из него типа картинку. Тогда не надо будет выбирать ничего руками, тесты как будто выберут картинку через псевдо-диалог.
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-03T13:36:44+02:00Rodegast197643> Емасs сам предложит список параметров, методов, констант - среди которых будет KeepAspectRatio?<br/><br/>Python это динамический язык с динамической типизацией. По этому корректное автодополнение тебе ни одна IDE не предложит.<br/><br/>> Я правильно понимаю, перед запуском скрипта он ВЕСЬ будет автоматически проверен на корректность…<br/><br/>Для этого есть утилиты статического анализа кода, например <a href="https://pypi.org/project/pyflakes/">https://pypi.org/project/pyflakes/</a> но и они не панацея.
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-03T12:55:03+02:00softland197640Тесты это замечательно, но пока я не представляю как тестить UI <br/>Хотя я вообще не представляю как удобно тестировать код.<br/>Поскольку тесты на то, что понятно как тестить, не интересно тестить.<br/>А то, что нужно тестировать, я не представляю как тестировать от слова совсем.<br/>И что-бы не быть голословным.<br/>Как протестировать функцию setImage<br/><div class="code"><pre> def setImage(self):<br/> fileName, _ = QtWidgets.QFileDialog.getOpenFileName(None, "Select image", "", "Image files (*.png *.jpg, *.jpeg, *.bmp)")<br/> if fileName:<br/> bitmap = QtGui.QPixmap(fileName)<br/> bitmap = bitmap.scaled(self.lblImage.width(), self.lblImage.height(), QtCore.Qt.keepAspectRatio) <br/> self.lblImage.setPixmap(bitmap)<br/> self.lblImage.setAlignment(QtCore.Qt.AlignCenter)</pre></div>как ошибку в “Qt.keepAspectRatio” можно обнаружить <strong>НЕ “руками”</strong>, не покликав в диалоге выбора файла… я не представляю<br/><br/><strong>Огромное спасибо за диалог.</strong><br/>Для меня всякий раз, крайне тяжелым является момент вхождения в новую систему. Поскольку всё работает не так, если вообще работает. Куда смотреть не понятно, что нажимать не ясно.
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-03T11:06:58+02:00py.user.next197635<blockquote><em>softland</em><br/>Я правильно понимаю, перед запуском скрипта он ВЕСЬ будет автоматически проверен на корректность…</blockquote>Нет. Просто запускаешь, он выпадает и информирует тебя о том, что произошло. Это если наскоряк делать. А вообще это делается в юнит-тестах, которые запускают все функции, а потом выводят все места, где ошибки произошли. Так ты можешь один раз запустить, получить десять ошибок и исправить их все. Потом запускаешь, все тесты прошли - ok, дальше пишешь программу.
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-03T09:54:55+02:00softland197626Спасибо.<br/><blockquote><em>py.user.next</em><br/>А если будет опечатка, то при запуске оно в нем выпадет и я его сразу поправлю. </blockquote>Я правильно понимаю, <strong>перед запуском</strong> скрипта он ВЕСЬ будет автоматически проверен на корректность…<br/>Вот пример того как отображает ошибку VSC после команды save<br/><img src="https://cdn1.savepice.ru/uploads/2018/12/3/bc4fe3346167e9fa876cc14d4fc0d92a-full.png"></img><br/>Именно этого я не вижу сейчас у себя в проекте python<br/><br/>Может кто подсказать, как заставить VCS делать полноценное автодополнение кода python и проверять на наличие синтаксических ошибок. Количество расширений огромное, пробовать каждое очень долго и есть вероятность найти первое попавшееся но не оптимальное…
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-03T01:46:15+02:00py.user.next197616<blockquote><em>softland</em><br/>Емасs сам предложит список параметров, методов, констант - среди которых будет KeepAspectRatio? </blockquote>У него есть модуль, который залазит в докстринги и через них выдаёт набор доступных имён. Это как если бы он сделал в консоли help(QtCore) и оно автоматически собрало всю информацию и имена все. То есть он выводит имя метода или класса и докстринг его.<br/><br/><blockquote><em>softland</em><br/>И, что будет если Вы не глядя ни на что, наберёте keepAspectRatio?</blockquote>Я его не введу, потому что сначала думаю, что написать. А если будет опечатка, то при запуске оно в нем выпадет и я его сразу поправлю. Если же это чужой код, в котором куча опечаток, то, возможно, есть средства автоматического переименовывания. Но обычно, когда чужой код беру, я через выпадения нахожу неправильные идентификаторы и исправляю их по памяти или по справке.<br/>
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-02T17:48:27+02:00softland197607Не IDE а программируемый редактор Emacs хорошо, понятно.<br/>Я имел в виду не то, есть там справка или нет, а то, что набрав <br/><div class="code"><pre>QtCore.Qt.</pre></div>Емасs сам предложит список параметров, методов, констант - среди которых будет KeepAspectRatio? <br/>И, что будет если Вы не глядя ни на что, наберёте keepAspectRatio? Когда вы узнаете что набрали метод не верно?
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-02T15:16:31+02:00py.user.next197603<blockquote><em>softland</em><br/>какую IDE вы используете?</blockquote>Emacs (не IDE, а программируемый редактор)<br/><br/><blockquote><em>softland</em><br/>автоподстановка в коде у Вас работает полностью, ваша IDE “знает” все методы QT?</blockquote>В Emacs можно сделать подсказки, но я использую Qt Assistant, в котором есть полная справка по всем классам Qt.<br/><a href="http://www.imageup.ru/img3/3226696/qtassist-keepaspect.jpg.html">http://www.imageup.ru/img3/3226696/qtassist-keepaspect.jpg.html</a><br/><br/><div class="code"><pre>
<span class="o">>>></span> <span class="n">PyQt5</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">KeepAspectRatio</span>
<span class="mi">1</span>
<span class="o">>>></span>
</pre></div>
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-02T13:27:25+02:00softland197599Вах. Всё просто!<br/>Спасибо огромное.<br/><br/>А подскажите, <br/>1. какую IDE вы используете?<br/>2. автоподстановка в коде у Вас работает полностью, ваша IDE “знает” все методы QT?<br/>3. мой VSC не проверяет написанный мной код на корректность. ошибки я получаю только на этапе выполнения. пример ниже<br/><img src="https://cdn1.savepice.ru/uploads/2018/12/2/f5edd87311bce2309962067af0152f5a-full.png"></img><br/>
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-02T12:58:36+02:00py.user.next197596<blockquote><em>softland</em><br/>Сооветственно, после выполнения pyuic5 получу новый файл “py” в котором не будет строк 4 и 5<br/>и самих функций setImage и addItem. Хоть какие названия я дам btnAdd и btnSelectImage.</blockquote>Так не надо в нём ничего писать. Его надо просто импортировать и установить как интерфейс окна. А писать уже всё надо в этом окне, которое к форме никак не относится.<br/><br/><blockquote><em>softland</em><br/>команда<br/>pyuic5 -x “main.ui” -o “main.py”</blockquote>mainwindow.ui преобразуется в mainwindow.py<br/>А потом в main.py ты импортируешь модуль mainwindow из текущей директории. Так ты получаешь доступ к тому классу пользовательского интерфейса. Потом от того класса наследуешь класс главного окна и запускаешь настройку интерфейса. Эти примеры в инете лежат.<br/><br/>Со своей проги<br/><div class="code"><pre>
<span class="o">...</span>
<span class="kn">from</span> <span class="nn">mainwindow</span> <span class="kn">import</span> <span class="n">Ui_MainWindow</span>
<span class="k">class</span> <span class="nc">App</span><span class="p">(</span><span class="n">QMainWindow</span><span class="p">,</span> <span class="n">Ui_MainWindow</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">parent</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setupUi</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup_ui</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">center</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">rect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">frameGeometry</span><span class="p">()</span>
<span class="n">best_position</span> <span class="o">=</span> <span class="n">QDesktopWidget</span><span class="p">()</span><span class="o">.</span><span class="n">availableGeometry</span><span class="p">()</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="n">rect</span><span class="o">.</span><span class="n">moveCenter</span><span class="p">(</span><span class="n">best_position</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">rect</span><span class="o">.</span><span class="n">topLeft</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">setup_ui</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup_ui_menu</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup_ui_statusbar</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup_ui_control_buttons</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup_ui_iprange_frame</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setup_ui_ports_frame</span><span class="p">()</span>
<span class="o">...</span>
</pre></div>
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-02T12:03:00+02:00softland197594<div class="code"><pre>1 self.statusbar.setObjectName("statusbar") <br/>2 MainWindow.setStatusBar(self.statusbar) <br/>3 <br/>4 self.btnSelectImage.clicked.connect(self.setImage) #строка написанная мной<br/>5 self.btnAdd.clicked.connect(self.addItem) #строка написанная мной</pre></div>Сооветственно, после выполнения pyuic5 получу новый файл “py” в котором не будет строк 4 и 5<br/>и самих функций setImage и addItem. Хоть какие названия я дам btnAdd и btnSelectImage.<br/><br/>команда<br/>pyuic5 -x “main.ui” -o “main.py”<br/>заменяет main.py на новый, после неё содержимое старого main.py будет удалено.<br/>Можно его до выполнения команды сохранить и потом ручками copy/past все свои строчки перенести в новый… но это мазохизм какой-то
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-02T11:30:03+02:00py.user.next197592<blockquote><em>softland</em><br/>Но если я теперь выполню pyuic5, то потеряю все написанные мной обработчики</blockquote>В смысле? Так ты давай осмысленные имена <u>всем</u> элементам, не используя нумерацию вроде button1 button2. Используй buttonQuit, buttonStartProcess.
Общий :: GUI :: Начало учебного проекта. Выбор библиотеки GUI
2018-12-02T10:32:20+02:00softland197590Начинаю простой проект, дипломная работа.<br/>GUI несёт подчинённый характер и не должен мешать работе.<br/>Подскажите какой enviroment собрать, какую библиотеку, какую IDE использовать?<br/><br/>Интерфейс будет нужен простой, но и не 3 lineEdit'a<br/>Очень хочется делать интерфейс не написанием кода а form editor'ом. Любым, не обязательно qt<br/><br/>Сейчас установлен Visual Studio Code, pyQt5<br/>Простой пример работает: <br/>- в qtDesigner сделал форму, конвертнул её в python код<br/>- открыл в VSC и дописал обработку событий. Запустил = работает<br/>- вернулся в qtDesigner, поменял форму и сохранил ui<br/>! Но если я теперь выполню pyuic5, то потеряю все написанные мной обработчики<br/><br/> Вопрос насущный, просьба не переводить в холивар между qt и gtk<br/>Мне надо решить утилитарную проблему. Иметь возможность под Windows интерфейс к своей программе, и желательно делать его не путем изучения джанго или qml, а с минимальными затратами. <br/>Накидал, вывел результаты, поменял рамочки/цвета, вывел заново, добавил чек-бокс, вывел… Добавил график, вывел. Ну вот и получилось. <br/>