Stack Overflow на русском Asked by biomotor on January 19, 2021
прошу помочь доработать код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from tkinter import *
from tkinter.ttk import *
root = Tk()
global Theme
Theme = {
'background': '#F2F2F2', # главное окно # фон
'background_hover': '#E5E5E5', # главное окно # фон при выделении
'border': '#666666', # главное окно # граница
'label': '#333333', # иконка перемещения # цвет
'label_hover': '#666666', # иконка перемещения # цвет при выделении
'group_background': '#F2F2F2', # подгруппы # фон
'group_border': '#D3D3D3', # подгруппы # граница
'group_border_hover': '#BBBBBB', # подгруппы # граница при выделении
'context_background': '#FFFFFF', # контекстное меню # фон
'context_background_hover': '#333333', # контекстное меню # фон при выделении
'context_border': '#333333', # контекстное меню # граница
'button_background': '#F2F2F2', # кнопка # фон
'button_background_hover': '#EFEFEF', # кнопка # фон при выделении
'button_border': '#ADADAD', # кнопка # граница
'button_border_hover': '#5F5F5F', # кнопка # граница при выделении
'button_size': 32, # кнопка # размер
'button_border_size': 1, # кнопка # толщина границы
}
class MFrame(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def Left(self):
print("Left mouse pressed")
def Right(self):
print("Right mouse pressed")
def initUI(self):
self.btn = MButton("i1.png", "i2.png", self.Left, self.Right)
self.btn.pack()
class MButton():
def __init__(self, *arg):
self.limage = arg[0]
self.himage = arg[1]
self.lcommand = arg[2]
self.rcommand = arg[3]
arg=[self.limage]; self.create(arg)
self.c.bind('<Leave>', lambda event, arg=[self.limage]: self.leave(event, arg))
self.c.bind('<Enter>', lambda event, arg=[self.himage]: self.hover(event, arg))
self.c.bind('<Button-1>', lambda event, arg=[self.lcommand]: self.mouseLeft(event, arg))
self.c.bind('<Button-3>', lambda event, arg=[self.rcommand]: self.mouseRight(event, arg))
def create(self, arg):
bs=Theme['button_border_size']
ics=Theme['button_size']
fill=Theme['button_background']
outline=Theme['button_border']
self.c = Canvas(root, width=ics, height=ics)
x = 1+bs; y = 1+bs; xs = ics-bs; ys = ics-bs;
self.r = self.c.create_rectangle(x, y, xs, ys, fill=fill, outline=outline, width=bs)
x = ics/2+bs; y = ics/2+bs;
self.image = PhotoImage(file=arg[0])
self.i = self.c.create_image(x, y, image=self.image)
def hover(self, event, arg):
fill=Theme['button_background_hover']
outline=Theme['button_border_hover']
self.c.itemconfig(self.r, fill=fill, outline=outline)
self.image = PhotoImage(file=arg[0])
self.c.itemconfig(self.i, image=self.image)
def leave(self, event, arg):
fill=Theme['button_background']
outline=Theme['button_border']
self.c.itemconfig(self.r, fill=fill, outline=outline)
self.image = PhotoImage(file=arg[0])
self.c.itemconfig(self.i, image=self.image)
def mouseLeft(self, event, arg):
arg[0]()
def mouseRight(self, event, arg):
arg[0]()
def pack(self):
self.c.pack()
if __name__ == '__main__':
app = MFrame(root)
root.mainloop()
1-Насколько правильно/грамотно сделано то, что имеется? Можно ли что-то улучшить?
2-После def __init__(self, *arg):
необходимо сделать проверку (по типу и количеству аргументов), подскажите пожалуйста как?
3-После изменения размера границы, иконка уползает вбок, как исправить?
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP