Замена в сборке файла-источника из .kle библиотеки

Автор biomotor, 02.06.21, 09:28:10

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

biomotor

p3452, разархивировать в память, спорный вопрос, если у меня 50-100 мб архива, то это не так важно, но когда библиотека наполнится до 1-2 гб, все это пихать в память? какой смысл так нагружать OS? проще всего на мой взгляд вообще без превьюшек обойтись, но всетаки с ними поудобней, поэтому я считаю что та схема которую я выбрал выше самая адекватная.

biomotor

Михаил88, а выпробовали использовать BitmapImage и иконки в виде кода? у меня не получилось собрать иконку.
что лучше BitmapImage или PhotoImage всетаки?
наверное основные различия:
BitmapImage представляет собой простое двухцветное изображение, PhotoImage – полноцветное изображение.
PhotoImage позволяет использовать полноцветное изображение. Кроме того у этого класса есть несколько (достаточно примитивных) методов для работы с изображениями. PhotoImage гарантированно понимает формат GIF.

выходит BitmapImage - примитив 2 цветов, чего нам обычно нехватает.... поэтому наверное удобней использовать PhotoImage.
кроме того PhotoImage может работать с альфа каналом.

Михаил88

Не получилось собрать иконку самого приложения? Я что то не совсем понял.

biomotor

Михаил88, есть ли аналог https://base64.guru/converter/encode/image/gif
только для BitmapImage?

с PhotoImage дела обстоят печально, не получается убрать border, и четко обозначить размер иконки.
если поставить на frame, то получается что frame подстраивается под размеры PhotoImage, хотя размеры четко заданы и большего размера.

Михаил88

from tkinter import *
''
data = '''#define smile_width 15
#define smile_height 15
static unsigned char smile_bits[] = {
   0x00, 0x00, 0x80, 0x00, 0x70, 0x07, 0x08, 0x08, 0x04, 0x10, 0x04, 0x10,
   0x74, 0x17, 0x02, 0x20, 0x04, 0x10, 0x14, 0x14, 0xe4, 0x13, 0x08, 0x08,
   0x70, 0x07, 0x80, 0x00, 0x00, 0x00 };'''
root=Tk()
image = BitmapImage(data=data, background='red', foreground='green')
button=Button(root, image=image)
button.pack()
root.mainloop()

Михаил88

нашел такой пример, но как изображение в data перевести не знаю

Михаил88

Цитата: biomotor от 23.06.21, 10:27:30с PhotoImage дела обстоят печально, не получается убрать border, и четко обозначить размер иконки.
если поставить на frame, то получается что frame подстраивается под размеры PhotoImage, хотя размеры четко заданы и большего размера.
а у меня смотрели как сделано в примере который я высылал?

biomotor

Михаил88, у Вас иконки идут напрямую, я хочу сделать кнопку с иконкой и границей.

Михаил88

а можно увидеть как на выходе вы хотите чтобы получилось? А так сложно что то понять.

biomotor

Михаил88, frame с границей и размерами, по центру иконка которая растягивается на максимум, если не указать ipadx или ipady
Screenshot_1.jpg

label имеет размеры не в пикселях,
frame не имеет image,
button не позволяет использовать нормальный border.

Михаил88

#70
у меня получилось сделать? Так должно было быть.
https://yadi.sk/d/GAXGKEwXdUL-IQ

biomotor

Михаил88, нет не так(старое не рассматриваем).

Нужно создать кнопку у которой вкл/выкл border,
внутри иконка растягивающаяся на всю кнопку и расположенная всегда строго по центру.
возможность поставить ipadx и ipady, для изменения размера иконки.
отсутствие лишних border и прочих границ.

P.S. у меня почему-то вместо растягивания иконки по кнопке, кнопка сжимается до иконки...

Михаил88

Цитата: biomotor от 23.06.21, 14:43:21Нужно создать кнопку у которой вкл/выкл border,
что это значит, вы скиньте пример

Михаил88

кнопка это ваш класс кнопка или стандартная кнопка? Так очень сложно понять без кода, что вы делаете

biomotor

#74
Вариант 1: (не растягивается иконка)

EXIT = 'R0lGODlhEAAQAHAAACH5BAEAAAsALAAAAAAQABAAgwMDAwAAAEVFRUlJSQEBAUhISEREREdHR0NDQ0JCQkpKSgAAAAAAAAAAAAAAAAAAAARMEASxqr0jEDnvLYFmhJ13kMiSkJQloNYatm+YXnJgjLZX5TDfjxRICC28kOG4qBFbHmciB62cek2WBYStOCmK4OXLufmum4BZCCJEAAA7'

class IButton(Frame):
    def __init__(self, master):
        super().__init__(master, width=40, height=40, bg='lightblue', highlightthickness=1, highlightbackground='#666666')
        self.pi = PhotoImage(data=EXIT)
        self.c = tk.Canvas(self, width=38, height=38, bg='lightblue', highlightthickness=0)
        self.ci = self.c.create_image(19, 19, image=self.pi, state=tk.NORMAL)
        self.c.place(anchor=tk.CENTER, relx=0.5, rely=0.5)

btn = IButton(root)
btn.pack()

biomotor

#75
Вариант 2: (сжимает frame до размеров иконки)

EXIT = 'R0lGODlhEAAQAHAAACH5BAEAAAsALAAAAAAQABAAgwMDAwAAAEVFRUlJSQEBAUhISEREREdHR0NDQ0JCQkpKSgAAAAAAAAAAAAAAAAAAAARMEASxqr0jEDnvLYFmhJ13kMiSkJQloNYatm+YXnJgjLZX5TDfjxRICC28kOG4qBFbHmciB62cek2WBYStOCmK4OXLufmum4BZCCJEAAA7'

class IButton(Frame):
    def __init__(self, master):
        super().__init__(master, width=40, height=40, bg='lightblue', highlightthickness=1, highlightbackground='#666666')
        self.pi = PhotoImage(data=self.data)
        self.lb = tk.Label(self, image=self.pi, relief='flat', borderwidth=0)
        self.lb.place(anchor=tk.CENTER, x=20-1, y=20-1, width=38, height=38)
        self.pack()

btn = IButton(root)
btn.pack()

Михаил88

from tkinter import *
import tkinter as tk

EXIT = 'R0lGODlhEAAQAHAAACH5BAEAAAsALAAAAAAQABAAgwMDAwAAAEVFRUlJSQEBAUhISEREREdHR0NDQ0JCQkpKSgAAAAAAAAAAAAAAAAAAAARMEASxqr0jEDnvLYFmhJ13kMiSkJQloNYatm+YXnJgjLZX5TDfjxRICC28kOG4qBFbHmciB62cek2WBYStOCmK4OXLufmum4BZCCJEAAA7'

class IButton(Frame):
    def __init__(self, master):
        super().__init__(master, width=40, height=40, bg='lightblue', highlightthickness=1, highlightbackground='#666666')
        self.pi = PhotoImage(data=EXIT)
        self.c = tk.Canvas(self, width=38, height=38, bg='lightblue', highlightthickness=0)
        self.ci = self.c.create_image(19, 19, image=self.pi, state=tk.NORMAL)
        self.c.place(anchor=tk.CENTER, relx=0.5, rely=0.5)

root = Tk()
btn = IButton(root)
btn.pack(fill=tk.BOTH, expand=1)
root.mainloop()

biomotor

Михаил88, не то, мне нужно чтобы иконка полностью заполняла frame, в моем случае class IButton(Frame):

Михаил88

#78
from tkinter import *
import tkinter as tk
from PIL import Image, ImageTk
import io
import base64

EXIT = 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAAXNSR0IB2cksfwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAG9QTFRFAAAApKSkdnZ2iYmJjIyMd3d3ODg4Ojo6kpKSPDw8iIiISEhINDQ0jY2Nj4+PNTU1Ozs7MjIySUlJMzMzlJSUmZmZmJiYi4uLk5OTPj4+PT09MTExPz8/m5ublpaWjo6OMDAwl5eXkZGRioqKhoaGNNjFLgAAACV0Uk5TAP///////////////////////////////////////////////6idEXsAAACQSURBVHicpZDbFoIgEEUBA+Qi5KCGVGiX///GMhGtHj0v7LXXGjgDQruDSbHggeBElPFyplIwmqTkSlcTGKuOecjU4BqEGv05lsi3bTsH7rR9yzvoA5z9d4MuAFyuP7Xa/l9GCyKAjVs3aBjjzYEuVuct1Pe5ksm7CeUeE1RacZkkYXxII+uamD7z5flDduQFuUsHRd9ZElkAAAAASUVORK5CYII='

class IButton(Frame):
    def __init__(self, master):
        super().__init__(master, width=40, height=40, bg='lightblue', highlightthickness=1, highlightbackground='#666666')

        self.image = Image.open(io.BytesIO(base64.b64decode(EXIT)))
        self.img_copy = self.image.copy()
        self.pi = ImageTk.PhotoImage(self.image)

        self.lb = tk.Label(self, image=self.pi, relief='flat', bg='lightblue', borderwidth=0)
        self.lb.pack(fill=tk.BOTH, expand=1)
        self.lb.bind('<Configure>', self._resize_image)
        self.pack(fill=tk.BOTH, expand=1) #, padx=3, pady=3 (если нужны границы)

    def _resize_image(self, event):

        new_width = event.width
        new_height = event.height
        self.image = self.img_copy.resize((new_width, new_height))
        self.pi = ImageTk.PhotoImage(self.image)
        self.lb.configure(image=self.pi)


root = Tk()
root.geometry("200x200")
btn = IButton(root)
btn.pack()
root.mainloop()

biomotor

Михаил88, практически то что нужно, единственное бы средствами tkinter...
а есть встроенные средства resize? или написать что-нить простенькое?
можно конечно использовать subsample и zoom, но иконка не сглаживается тогда...