Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 28, 2018 10:49:46

r2d2_565
Зарегистрирован: 2018-04-28
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как лучше сделать GUI интерфейс

Добрый день!

Просьба помочь с выбором как просто и “красиво” сделать GUI интерфейс.
Приложение, которое я пишу, состоит из картинки на весь экран и больших кнопок (неправильной формы) для управления с тачскрина. Кнопки полупрозрачные при нажатии слегка меняют цвет.

Первое что приходит на ум 2 картинки в памяти (все кнопки отжаты и все кнопки нажаты) и одна картинка на экране куда копируются фрагменты кнопок и, может быть, небольшая анимация.

Офлайн

#2 Апрель 28, 2018 12:23:58

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как лучше сделать GUI интерфейс

r2d2_565
просто и “красиво”
r2d2_565
для управления с тачскрина.
Платформа мобильная? Вашим требованиям точно удовлетворяют web приложения (криволинейные активные области, анимация, тачскрин). Наверное можно сделать на Qt.
Просто? Ничуть! Начните с приложения с фоновой картинкой и одной обычной кнопкой. Если это освоите то можете двигаться дальше. В противном случае велика вероятность что вы запутаетесь и все бросите.



Офлайн

#3 Апрель 28, 2018 14:11:01

r2d2_565
Зарегистрирован: 2018-04-28
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как лучше сделать GUI интерфейс

Это терминал самообслуживания

from tkinter import *
from PIL import Image, ImageTk

root=Tk()
root.overrideredirect(1)
def callback(event):
print (“clicked at”, event.x, event.y)

cnv=Canvas(root, width=600, height=400, bg=“blue”)
cnv.bind(“<Button-1>”, callback)
cnv.pack()

# Все кнопки нажаты
iFonDown=Image.open(“fon.png”) # 600ч400
iBtDown=Image.open(“bt_down.png”) # 100x100
iFonDown.paste(iBtDown, (250,250), iBtDown)
iBtDownOk=iFonDown.crop((250,250,350,350)) # нажатая кнопка на фоне

p=ImageTk.PhotoImage(iBtDownOk)
i=cnv.create_image(50, 50, image=p)
root.mainloop()

Деньги уже получены и уже истрачены, т.ч. придется доделывать па-любому.

Отредактировано r2d2_565 (Апрель 28, 2018 14:44:34)

Офлайн

#4 Апрель 28, 2018 14:49:52

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2832
Репутация: +  186  -
Профиль   Отправить e-mail  

Как лучше сделать GUI интерфейс

Про глупости вроде web и tk можешь сразу забыть. Первый неоправданно трудоёмок, второй страшен и морально устарел. Используй PySide + QML.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Апрель 28, 2018 14:52:20

r2d2_565
Зарегистрирован: 2018-04-28
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как лучше сделать GUI интерфейс

Вообще то все гораздо хуже чем вы думаете
Это будет движок по моему скрипту
Требование простое красивый фон и прозрачные кнопки по конфиг файлу.
Таких форм будет много
На выходе код кнопки и номер формы
Еще будет мелкая базка, парочка устройств через COM-порт
Еще будет мобильное приложение: отметить посещаемость и посмотреть статистику
И надо предусмотреть связь через сокеты

Не получится на питоне получится на чем-то другом, хотя питон как раз бы подошел.

Отредактировано r2d2_565 (Апрель 28, 2018 15:03:21)

Офлайн

#6 Апрель 28, 2018 15:51:07

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как лучше сделать GUI интерфейс

r2d2_565
Деньги уже получены и уже истрачены, т.ч. придется доделывать па-любому.
:)
Да требования впечатляют:
r2d2_565
  • Больших кнопок (неправильной формы)
  • может быть, небольшая анимация
  • красивый фон и прозрачные кнопки по конфиг файлу.
  • Таких форм будет много
  • На выходе код кнопки и номер формы
  • Еще будет мелкая базка, парочка устройств через COM-порт
  • Еще будет мобильное приложение: отметить посещаемость и посмотреть статистику
  • И надо предусмотреть связь через сокеты

Если не секрет сколько вы с них сшибли денег? Код проекта который вы начали впечатляет…

r2d2_565
Не получится на питоне получится на чем-то другом
Интересно а у вас заготовки на других языках есть? Может приведете для сравнения. Задача разработки GUI Часто встречается.

.



Офлайн

#7 Апрель 28, 2018 16:01:37

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Как лучше сделать GUI интерфейс

Офлайн

#8 Апрель 28, 2018 16:45:58

r2d2_565
Зарегистрирован: 2018-04-28
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как лучше сделать GUI интерфейс

Обычно писал на билдере с++
Друзья попросили адаптировать старый проект под узкие нужды.
Вот и подумал: Настал момент поменять лошадь за чужой счет.
А лошадь оказалась мутантом. Мутирует и мутирует. Имена меняет и цифры.
Вероятно это из-за того, что деньги важнее истины.

Спасибо за наводки, пытаюсь понять какой дао короче.

Офлайн

#9 Май 7, 2018 02:43:16

r2d2_565
Зарегистрирован: 2018-04-28
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как лучше сделать GUI интерфейс

Это работает для одной кнопки.
Можно как-нибудь сократить текст?
Грубые ошибки наблюдаются?

 from tkinter import *
from PIL import Image, ImageTk
class Scr:
    def __init__(self, root, w, h):
        self.scrw=w
        self.scrh=h
        self.cnv=Canvas(root, width=w-1, height=h-1, bg="blue")
        self.cnv.bind("<ButtonPress-1>", self.LBPress)
        self.cnv.bind("<ButtonRelease-1>", self.LBRelease)
        self.cnv.pack()
        self.ifonu=Image.open("fon.png")       # Изображение с отжатыми кнопками
        self.ifond=Image.open("fon.png")       # Изображение с нажатыми кнопками
        self.ifon=Image.open("fon.png")         # Изображение для отображения на экране
        self.p=ImageTk.PhotoImage(self.ifon)
        self.i=self.cnv.create_image(0, 0, image=self.p)
    # Добавить кнопку    
    def addbt(self, x, y, file_up, file_down):
        self.bx=x                                                      # Left
        self.by=y                                                      # Top
        self.bw=220                                                 # Width 
        self.bh=95                                                   # Height
        self.ibtu=Image.open(file_up)                        # Полупрозрачная отжатая кнопка 
        self.ibtd=Image.open(file_down)                    # Полупрозрачная нажатая кнопка
        self.ifonu.paste(self.ibtu, (x,y), self.ibtu)         # Наносим кнопку отжатую
        self.ifond.paste(self.ibtd, (x,y), self.ibtd)         # Наносим нажатую
        self.btu=self.ifonu.crop((x,y,x+self.bw,y+self.bh))   # Вырезаем полупрозрачную кнопку с фоном
        self.btd=self.ifond.crop((x,y,x+self.bw,y+self.bh))   # Вырезаем полупрозрачную кнопку с фоном
        self.ifon.paste(self.btu, (x,y))                         # Отображаем текущее состояние на изображении для отображения
        self.pp=ImageTk.PhotoImage(self.ifon)
        self.cnv.itemconfigure(self.i, image=self.pp, anchor="nw")
        
# На канвасе обновляем изображение кнопка нажата
    def LBPress(self, event):
        if self.bx<event.x<self.bx+self.bw and self.by<event.y<self.by+self.bh:
            self.ifon.paste(self.btd, (self.bx,self.by))
            self.pp=ImageTk.PhotoImage(self.ifon)
            self.cnv.itemconfigure(self.i, image=self.pp, anchor="nw")
# На канвасе обновляем изображение кнопка отжата
    def LBRelease(self, event):
        if self.bx<event.x<self.bx+self.bw and self.by<event.y<self.by+self.bh:
            self.ifon.paste(self.btu, (self.bx,self.by))
            self.pp=ImageTk.PhotoImage(self.ifon)
            self.cnv.itemconfigure(self.i, image=self.pp, anchor="nw")
w=1024
h=768
root = Tk()
root.geometry(str(w)+"x"+str(h)+"+0+0")
root.overrideredirect(1)
s = Scr(root, w, h)
s.addbt(200, 500, "bt_up.png", "bt_down.png")
root.mainloop() 

Отредактировано r2d2_565 (Май 7, 2018 02:59:00)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version