Добро пожаловать на ТАК!Прежде всего, вам не нужно использовать config
для всех ваших кнопок, текстовых виджетов и т. Д. - вы можете просто указать все эти параметры в качестве аргументов при создании виджета, например,
textCon = Text(window2, width=8, height=1, state=DISABLED, background="#EBEBEB", font="Roboto")
Это делает ваш код короче, проще и быстрее.То, что вы делаете в onClickDisplay
, не работает по простой причине.Вы используете and
, который является логическим оператором, чтобы попытаться сделать несколько вещей одновременно - это не то, о чем and
.Вот как я бы переписал ваш код:
class CustomImageEnhancer()
def __init__(self):
def onClickImport():
askimg = fd.askopenfilename()
self.img = Image.open(askimage)
return self.img
def converted_image(img_a, contrast, brightness, color, sharpness):
contrast_converter = ImageEnhance.Contrast(img_a)
img_b = contrast_converter.enhance(contrast)
brightness_converter = ImageEnhance.Brightness(img_b)
img_c = brightness_converter.enhance(brightness)
color_converter = ImageEnhance.Color(img_c)
img_d = color_converter.enhance(color)
sharpness_converter = ImageEnhance.Sharpness(img_d)
img_final = sharpness_converter.enhance(sharpness)
return img_final
def onClickDisplay():
cont = ScalerContrast.get()
bright = ScalerBrightness.get()
col = ScalerColor.get()
sharp = ScalerSharpness.get()
img = self.img
new_img = converted_image(img, cont, bright, col, sharp)
new_img.show()
root = Tk()
OpenB = ttk.Button(root, text="Import Photo", command=onClickImport)
OpenB.pack()
DisplayButton=ttk.Button(root, text="Show", command=onClickDisplay)
ScalerContrast= ttk.Scale(root, from_=1.0, to_=5.0)
ScalerBrightness = ttk.Scale(root, from_=1.0, to_=5.0)
ScalerColor = ttk.Scale(root, from_=1, to_=100)
ScalerSharpness = ttk.Scale(root, from_=1, to_=100)
DisplayButton.pack()
ScalerContrast.pack()
ScalerBrightness.pack()
ScalerColor.pack()
ScalerSharpness.pack()
textCon=Text(root, width=8, height=1, state=DISABLED, background="#EBEBEB", font='Roboto')
textCon.insert(END, 'Contrast')
textCon.pack()
textBr=Text(root, width=8, height=1, state=DISABLED, background='#EBEBEB', font='Roboto')
textBr.insert(END, 'Brightness')
textBr.pack()
textCor=Text(root, width=8, height=1, state=DISABLED, background='#EBEBEB', font='Roboto')
textCor.insert(END, 'Color')
textCor.pack()
textSh=Text(root, width=8, height=1, state=DISABLED, background='#EBEBEB', font='Roboto')
textSh.insert(END, 'Color')
textSh.pack()
root.mainloop()
window=CustomImageEnhancer()
Определив класс, вы можете обойти необходимость использования глобальных переменных.Открытие двух окон не является обязательным в вашем случае, так как вы можете просто добавить кнопку для выбора файла изображения в другое окно.Я бы рекомендовал использовать place()
вместо pack()
, так как это позволит вам точно определить координаты x и y для ваших разных виджетов внутри окна, что сделает его более структурированным - pack
просто размещает виджеты один за другим.