Страница 2 из 3
Re: Python - графика
Добавлено: 03 фев 2019, 02:13
Olej
Olej писал(а):
Вот рекомендуют для этого:
Rapyd-Tk
Следующий, рекомендуемый и довольно свеже развиваемый, GUI конструктор -
pygubu:
GIT репозиторий:
https://github.com/alejandroautalan/pygubu
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python/1$ git clone https://github.com/alejandroautalan/pygubu
Клонирование в «pygubu»…
remote: Enumerating objects: 3067, done.
remote: Total 3067 (delta 0), reused 0 (delta 0), pack-reused 3067
Получение объектов: 100% (3067/3067), 1.66 MiB | 2.43 MiB/s, готово.
Определение изменений: 100% (2038/2038), готово.
olej@ACER:~/2019_WORK/own.WORK/python/1$ ls -l
итого 4
drwxr-xr-x 10 olej olej 4096 фев 3 00:38 pygubu
olej@ACER:~/2019_WORK/own.WORK/python$ du -hs pygubu
5,4M pygubu
Там уже в каталоге можем проверить работоспособность (до установки):
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python/pygubu$ ./runtests.sh
=============
Default Python 3: /usr/bin/python3
version: Python 3.7.2
tk version :8.6
..................................................................................
----------------------------------------------------------------------
Ran 82 tests in 7.576s
OK
=============
Default Python 2: /usr/bin/python
Python 2.7.15+
version:
tk version :8.6
..................................................................................
----------------------------------------------------------------------
Ran 82 tests in 7.780s
OK
=============
Python 3.3.2 (custom build)
tk 8.6 (debian package)
./runtests.sh: 25: ./runtests.sh: cpython3.3.2: not found
=============
Python 3.4.0 (custom build)
tk 8.6 (debian package)
./runtests.sh: 33: ./runtests.sh: cpython3.4: not found
Re: Python - графика
Добавлено: 03 фев 2019, 02:16
Olej
Olej писал(а):
Там уже в каталоге можем проверить работоспособность (до установки):
Установка достаточно традиционным для Python способом (под Python 2 можно просто установить через pip):
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python/pygubu$ time sudo python3 setup.py install
[sudo] пароль для olej:
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/pygubu
copying pygubu/stockimage.py -> build/lib/pygubu
copying pygubu/testui.py -> build/lib/pygubu
copying pygubu/__init__.py -> build/lib/pygubu
copying pygubu/binding.py -> build/lib/pygubu
copying pygubu/ui2code.py -> build/lib/pygubu
creating build/lib/pygubu/builder
...
running install_scripts
Installing pygubu-designer script to /usr/local/bin
real 0m3,963s
user 0m0,418s
sys 0m0,080s
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python/pygubu$ which pygubu-designer
/usr/local/bin/pygubu-designer
Re: Python - графика
Добавлено: 03 фев 2019, 02:20
Olej
Olej писал(а):
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python/pygubu$ which pygubu-designer
/usr/local/bin/pygubu-designer
Запуск:
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python/pygubu$ pygubu-designer
Traceback (most recent call last):
File "/usr/local/bin/pygubu-designer", line 6, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 3126, in <module>
@_call_aside
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 3110, in _call_aside
f(*args, **kwargs)
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 3139, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 581, in _build_master
ws.require(__requires__)
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 898, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 784, in resolve
raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'appdirs>=1.3' distribution was not found and is required by pygubu
И облом...
Но, как оказалось, этому делу легко помочь:
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python/pygubu$ sudo python3 -m pip install appdirs
Collecting appdirs
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f5a56098390>: Failed to establish a new connection: [Errno -2] Неизвестное имя или служба')': /simple/appdirs/
Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f5a560982b0>: Failed to establish a new connection: [Errno -2] Неизвестное имя или служба')': /simple/appdirs/
Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f5a56098208>: Failed to establish a new connection: [Errno -2] Неизвестное имя или служба')': /simple/appdirs/
Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f5a56098fd0>: Failed to establish a new connection: [Errno -2] Неизвестное имя или служба')': /simple/appdirs/
Downloading https://files.pythonhosted.org/packages/56/eb/810e700ed1349edde4cbdc1b2a21e28cdf115f9faf263f6bbf8447c1abf3/appdirs-1.4.3-py2.py3-none-any.whl
Installing collected packages: appdirs
Successfully installed appdirs-1.4.3
Запуск:
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python/pygubu$ pygubu-designer
python version: 3.7.2 on linux
pygubu version: 0.9.8.2
...
Вот такой вот дизайнер ... - это кандидат №2.
Re: Python - графика
Добавлено: 03 фев 2019, 02:31
Olej
Olej писал(а):Вот такой вот дизайнер ... - это кандидат №2.
Логика такого дизайнера такая:
- построив UI сохраняем его как XML файл ... в экзамплах они приводят helloworld.ui ...
- а потом он используется в коде, как пример приводится:
Код: Выделить всё
try:
import tkinter as tk # for python 3
except:
import Tkinter as tk # for python 2
import pygubu
class Application:
def __init__(self, master):
#1: Create a builder
self.builder = builder = pygubu.Builder()
#2: Load an ui file
builder.add_from_file('helloworld.ui')
#3: Create the widget using a master as parent
self.mainwindow = builder.get_object('mainwindow', master)
if __name__ == '__main__':
root = tk.Tk()
app = Application(root)
root.mainloop()
Здесь принципиально важно:
Здесь вот есть достаточно обстоятельное wiki-описание использования всей этой техники -
Home:
sigoa edited this page on 25 Dec 2017 · 24 revisions
Pygubu really shines as the GUI builder in a python RAD IDE, such as based on LiClipse (which includes git and debug GUIs, plus lint/pep tooling if so desired). Though some manual text editing remains.
Обращаем внимание на дату последней ревизии - месяц назад!
Re: Python - графика
Добавлено: 03 фев 2019, 02:36
Olej
3-й кандидат -
PAGE - Python Automatic GUI Generator - Version 4.20
PAGE is a cross-platform drag-and-drop GUI generator, bearing a resemblance to Visual Basic. It allows one to easily create GUI windows containing a selection of Tk and ttk widgets. Required are Tcl/Tk 8.6 and Python 2.7+. I am actually using Tcl/Tk 8.6 and Python 2.7. PAGE springs from Virtual Tcl, a Tcl/Tk program, forked to generate Python modules that realize the desired GUI. Tcl is required for running PAGE but is not required for executing the generated Python code.
PAGE is not an end-all, be-all tool, but rather one that attempts to ease the burden on the Python programmer. It is aimed at the user who will put up with a less than completely general GUI capability in order to get an easily generated GUI. A helper and learning tool, it does not build an entire application but rather is aimed at building a single GUI class and the boiler plate code in Python necessary for getting the GUI on the screen.
Systems Supported
Currently PAGE and the resulting GUI windows have been tested on Linux running Python 2.7, and 3.5 running on Linux, on Win32 and Windows 10, OSX, and Raspbian.
Качаем отсюда:
https://sourceforge.net/projects/page/f ... t/download
Last Update: 2019-01-17
Additional Project Details
Languages
French, English
Intended Audience
Developers, End Users/Desktop
User Interface
X Window System (X11), Qt
Programming Language
Python, C++
Registered
2000-12-22
Код: Выделить всё
olej@ACER:~/Загрузки$ ls -l page-4.20.tgz
-rw-r--r-- 1 olej olej 12697456 фев 3 01:36 page-4.20.tgz
Re: Python - графика
Добавлено: 03 фев 2019, 02:50
Olej
После разархивирования (в $HOME):
Код: Выделить всё
olej@ACER:~/page$ ls -l
итого 80
-rwxr-xr-x 1 olej olej 1522 янв 17 00:52 configure
drwxr-xr-x 5 olej olej 4096 ноя 22 19:00 docs
drwxr-xr-x 20 olej olej 4096 янв 16 18:01 examples
drwxr-xr-x 15 olej olej 4096 окт 5 2016 examples-3
drwxr-xr-x 3 olej olej 4096 окт 20 18:04 images
drwxr-xr-x 7 olej olej 4096 янв 17 00:52 lib
-rwxr-xr-x 1 olej olej 169 янв 17 00:52 page
drwxr-xr-x 2 olej olej 4096 сен 9 2016 page-icons
-rwxr-xr-x 1 olej olej 29212 янв 17 00:52 page.tcl
-rwxr-xr-x 1 olej olej 3078 янв 17 00:52 release
-rw-r--r-- 1 olej olej 23 янв 17 00:52 version
drwxr-xr-x 2 olej olej 4096 янв 28 2017 WIN_INSTALL
-rw-r--r-- 1 olej olej 236 янв 17 00:52 WRITE.BAT
Там в составе полнейший комплект документации в разных форматах...
Re: Python - графика
Добавлено: 03 фев 2019, 03:10
Olej
Olej писал(а):
После разархивирования (в $HOME):
Код: Выделить всё
olej@ACER:~/page$ ls -l
итого 80
-rwxr-xr-x 1 olej olej 1522 янв 17 00:52 configure
drwxr-xr-x 5 olej olej 4096 ноя 22 19:00 docs
drwxr-xr-x 20 olej olej 4096 янв 16 18:01 examples
drwxr-xr-x 15 olej olej 4096 окт 5 2016 examples-3
drwxr-xr-x 3 olej olej 4096 окт 20 18:04 images
drwxr-xr-x 7 olej olej 4096 янв 17 00:52 lib
-rwxr-xr-x 1 olej olej 169 янв 17 00:52 page
drwxr-xr-x 2 olej olej 4096 сен 9 2016 page-icons
-rwxr-xr-x 1 olej olej 29212 янв 17 00:52 page.tcl
-rwxr-xr-x 1 olej olej 3078 янв 17 00:52 release
-rw-r--r-- 1 olej olej 23 янв 17 00:52 version
drwxr-xr-x 2 olej olej 4096 янв 28 2017 WIN_INSTALL
-rw-r--r-- 1 olej olej 236 янв 17 00:52 WRITE.BAT
Запуск:
Код: Выделить всё
olej@ACER:~/page$ ./page
./page: 9: exec: /opt/ActiveTcl-8.6/bin/wish8.6: not found
Облом...
Только потому, что его нужно предварительно
сконфигурировать на используемую реализацию Tcl/Tk:
Код: Выделить всё
olej@ACER:~/page$ time ./configure
Configuring page
Using /usr/bin/wish8.6
#-------- Generated page --------------#
#!/bin/sh
PATH_TO_WISH=/usr/bin/wish8.6
PAGE_HOME=/home/olej/page
export PATH_TO_WISH
export PAGE_HOME
exec ${PATH_TO_WISH} ${PAGE_HOME}/page.tcl "$*"
#-------- End of page -----------------#
real 0m0,016s
user 0m0,004s
sys 0m0,005s
Запуск:
Re: Python - графика
Добавлено: 03 фев 2019, 19:10
Olej
Olej писал(а):
Логика такого дизайнера такая:
- построив UI сохраняем его как XML файл ... в экзамплах они приводят helloworld.ui ...
- а потом он используется в коде, как пример приводится:
Леплю такое вот условное приложение, похожее на то, что мне нужно:
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python$ ls -l xlock.*
-rwxr-xr-x 1 olej olej 1008 фев 3 17:50 xlock.py
-rw-r--r-- 1 olej olej 4362 фев 3 17:46 xlock.ui
olej@ACER:~/2019_WORK/own.WORK/python$ file xlock.ui
xlock.ui: XML 1.0 document text
- xlock.ui - это то, что сгенерировал
pygubu - XML описание структуры UI;
- xlock.py - это то, что я написал для использования этого UI:
Код: Выделить всё
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import tkinter as tk
import pygubu
class Application:
def __init__(self, master):
#1: Create a builder
self.builder = builder = pygubu.Builder()
#2: Load an ui file
builder.add_from_file( 'xlock.ui' )
#3: Create the widget using a master as parent
self.mainwindow = builder.get_object( 'Frame_1', master )
if __name__ == '__main__':
root = tk.Tk()
app = Application(root)
root.mainloop()
Запуск:
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python$ ./xlock.py
ERROR:pygubu.builder.builderobject:Failed to set property 'container' on class '<class 'tkinter.Frame'>'. TclError: can't modify -container option after widget is created
- p11.png (9.54 КБ) 2036 просмотров
Оно сырое, горбатое, но это минимально необходимо и достаточно, для того что нужно! : есть дерево виджетов, их имена, и класс приложения, который нужно только расширять.
P.S. Обратите внимание на картинку дизайнера - он использует компоновщик grid а не pack Tk, что тоже то, что хотелось.
Re: Python - графика
Добавлено: 03 фев 2019, 21:28
Olej
Без всяких фокусов, не задумываясь о компоновке и флагах, размещаю виджеты на панели шаблона:
- p10.png (7.87 КБ) 2035 просмотров
- p11.png (15.46 КБ) 2035 просмотров
В меню, сохранив проект, дав ему имя, нужно сгенерировать 2 .py файла:
- p15.png (13 КБ) 2035 просмотров
- Generate Python GUI
- Generate Support Module (на картинке обрезан)
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python$ ls xlock_page*.*
xlock_page.py xlock_page_support.py xlock_page_support.pyc xlock_page.tcl
<xlock_page> - это "имя проекта".
Запуск:
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/python$ python3 xlock_page.py
И получаем:
- p13.png (7.93 КБ) 2035 просмотров
Re: Python - графика
Добавлено: 27 фев 2019, 12:38
Olej
Olej писал(а):Опыт использования связки Python/Tkinter оказывается очень продуктивным! (я ещё по свободе выложу несколько исходников).
Единственное что - чудовищно тоскливое занятие расписывать эти виджеты вручную, без какого-то визуального GUI компоновщика, расставляющего виджеты и готовящего шаблон приложения.
Ещё раз возвращаюсь к визуальным графическим построителям под Tkinter, теперь уже не "на попробовать", а под реальный небольшой проект.
Потому что, при достоинствах в коде, Tkinter - компоновать под него виджеты, пользуясь
вручную их 3-мя "менеджерами компоновки" ( pack(), grid(), place() ) - это сильно тоскливое занятие.