Форум сайта python.su
Добрый день!
Просьба помочь с выбором как просто и “красиво” сделать GUI интерфейс.
Приложение, которое я пишу, состоит из картинки на весь экран и больших кнопок (неправильной формы) для управления с тачскрина. Кнопки полупрозрачные при нажатии слегка меняют цвет.
Первое что приходит на ум 2 картинки в памяти (все кнопки отжаты и все кнопки нажаты) и одна картинка на экране куда копируются фрагменты кнопок и, может быть, небольшая анимация.
Офлайн
r2d2_565
просто и “красиво”
r2d2_565Платформа мобильная? Вашим требованиям точно удовлетворяют web приложения (криволинейные активные области, анимация, тачскрин). Наверное можно сделать на Qt.
для управления с тачскрина.
Офлайн
Это терминал самообслуживания
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)
Офлайн
Про глупости вроде web и tk можешь сразу забыть. Первый неоправданно трудоёмок, второй страшен и морально устарел. Используй PySide + QML.
Офлайн
Вообще то все гораздо хуже чем вы думаете
Это будет движок по моему скрипту
Требование простое красивый фон и прозрачные кнопки по конфиг файлу.
Таких форм будет много
На выходе код кнопки и номер формы
Еще будет мелкая базка, парочка устройств через COM-порт
Еще будет мобильное приложение: отметить посещаемость и посмотреть статистику
И надо предусмотреть связь через сокеты
Не получится на питоне получится на чем-то другом, хотя питон как раз бы подошел.
Отредактировано r2d2_565 (Апрель 28, 2018 15:03:21)
Офлайн
r2d2_565:)
Деньги уже получены и уже истрачены, т.ч. придется доделывать па-любому.
r2d2_565
- Больших кнопок (неправильной формы)
- может быть, небольшая анимация
- красивый фон и прозрачные кнопки по конфиг файлу.
- Таких форм будет много
- На выходе код кнопки и номер формы
- Еще будет мелкая базка, парочка устройств через COM-порт
- Еще будет мобильное приложение: отметить посещаемость и посмотреть статистику
- И надо предусмотреть связь через сокеты
r2d2_565Интересно а у вас заготовки на других языках есть? Может приведете для сравнения. Задача разработки 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)
Офлайн