Python: Tkinter GUI

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 03 фев 2019, 02:13

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 03 фев 2019, 02:16

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 03 фев 2019, 02:20

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.
Вложения
p1.png

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 03 фев 2019, 02:31

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()

Здесь принципиально важно:

Код: Выделить всё

builder.add_from_file('helloworld.ui')
Здесь вот есть достаточно обстоятельное 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.
Обращаем внимание на дату последней ревизии - месяц назад!

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 03 фев 2019, 02:36

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 03 фев 2019, 02:50

Olej писал(а):3-й кандидат - PAGE - Python Automatic GUI Generator - Version 4.20

Код: Выделить всё

olej@ACER:~/Загрузки$ ls -l page-4.20.tgz 
-rw-r--r-- 1 olej olej 12697456 фев  3 01:36 page-4.20.tgz
После разархивирования (в $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:~$ du -hs page
21M	page
Там в составе полнейший комплект документации в разных форматах...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 03 фев 2019, 03:10

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
Запуск:

Код: Выделить всё

olej@ACER:~/page$ ./page
...
Вложения
p1.png
p1.png (7.17 КБ) 2066 просмотров
p2.png
p3.png
p3.png (8.02 КБ) 2066 просмотров
p4.png
p5.png
p5.png (5.44 КБ) 2066 просмотров

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 03 фев 2019, 19:10

Olej писал(а): Логика такого дизайнера такая:
- построив UI сохраняем его как XML файл ... в экзамплах они приводят helloworld.ui ...
- а потом он используется в коде, как пример приводится:
Леплю такое вот условное приложение, похожее на то, что мне нужно:
p10.png

Код: Выделить всё

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
p11.png (9.54 КБ) 2035 просмотров
Оно сырое, горбатое, но это минимально необходимо и достаточно, для того что нужно! : есть дерево виджетов, их имена, и класс приложения, который нужно только расширять.

P.S. Обратите внимание на картинку дизайнера - он использует компоновщик grid а не pack Tk, что тоже то, что хотелось.
Вложения
xlock.py
(504 байт) 91 скачивание

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 03 фев 2019, 21:28

Olej писал(а):3-й кандидат - PAGE - Python Automatic GUI Generator - Version 4.20
Без всяких фокусов, не задумываясь о компоновке и флагах, размещаю виджеты на панели шаблона:
p10.png
p10.png (7.87 КБ) 2034 просмотра
p11.png
p11.png (15.46 КБ) 2034 просмотра
В меню, сохранив проект, дав ему имя, нужно сгенерировать 2 .py файла:
p15.png
p15.png (13 КБ) 2034 просмотра
- 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
p13.png (7.93 КБ) 2034 просмотра
Вложения
xlock_page.py
(2.58 КБ) 80 скачиваний
xlock_page_support.py
(706 байт) 90 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python - графика

Непрочитанное сообщение Olej » 27 фев 2019, 12:38

Olej писал(а):Опыт использования связки Python/Tkinter оказывается очень продуктивным! (я ещё по свободе выложу несколько исходников).
Единственное что - чудовищно тоскливое занятие расписывать эти виджеты вручную, без какого-то визуального GUI компоновщика, расставляющего виджеты и готовящего шаблон приложения.
Ещё раз возвращаюсь к визуальным графическим построителям под Tkinter, теперь уже не "на попробовать", а под реальный небольшой проект.
Потому что, при достоинствах в коде, Tkinter - компоновать под него виджеты, пользуясь вручную их 3-мя "менеджерами компоновки" ( pack(), grid(), place() ) - это сильно тоскливое занятие.

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей