Форум сайта python.su
1
ramiВы меня застали в расплох. Видимо была ошибка в утерянном варианте на виджетах Text, т.к. цвета перекачавали оттуда, и там разница на старом TN монторе была очень заметна, а по факту, выходит, что я на TN вообще не замечал светло-серый фон… значит сейчас все исполняется корректно (попробовал жесче цветовую градацию).
В этих строках кода вы меняете чёрный цвет шрифта (по умолчанию) на точно такой же чёрный цвет, а белый цвет фона (по умолчанию) на точно такой же белый цвет. Вы не видите разницу между тем что было и что стало? Я тоже не вижу. Так, замените белый и чёрный на красный и синий, сразу увидите разницу.
ramiменя просто убили )))
… Про лютый говнокод я молчу…
Офлайн
72
В функцию нужно передавать только обязательные параметры (заранее не известные), параметры известные заранее лучше передавать по умолчанию, а ещё лучше как константы (переменные с заранее присвоенным значением). Сравните функции:
def DrawTable(Fa,Ba,Fp,Bp,Fm,Bm): #все параметры должны быть переданы """ Строка документции """ def setDef(v,d): #что делает эта функция??? if v=='': v=d return v #в следующей строке кода переназначаются параметры переданные в функцию DrawTable. Вот это и есть лютый говнокод. Fa,Ba,Fp,Bp,Fm,Bm=setDef(Fa,'#000'),setDef(Ba,'#FFF'),setDef(Fp,'#000'),setDef(Bp,'#F8F8F8'),setDef(Fm,'#000'),setDef(Bm,'#FFFFF8') print(Fa,Ba,Fp,Bp,Fm,Bm) #смотрим на переменные """ Какой-то код не нужный пока """ Table=DrawTable('','','#114','','','') #передаём в функцию пять пустых и один нормальный параметр #сравните с этий функцией: def DrawTable1(Fa='#000',Ba='#FFF',Fp='#000',Bp='#F8F8F8',Fm='#000',Bm='#FFFFF8'): #если параметр не передан, то будет по умолчанию """ Строка документции """ print(Fa,Ba,Fp,Bp,Fm,Bm) #смотрим на переменные """ Какой-то код не нужный пока """ Table=DrawTable1(Ba='этот параметр будет изменён',Fm='этот тоже') #передаём в функцию только то, что должно измениться
import tkinter as tk #очень удобно назначать константы здесь: Fa,Ba='#000','#fdd' #Foregraund Color & Backgraund Color for Active Fp,Bp='#000','#dfd' #Foregraund Color & Backgraund Color for Passive Fm,Bm='#000','#ddf' #Foregraund Color & Backgraund Color for Marked W=tk.Tk() def DrawTable(ER,H): #Build simple empty Table for i,k in enumerate(H): #создаём виджеты в соответствии с переданными параметрами if H[k]<100: #Passive tk.Label(W,text=k,relief='groove',fg=Fp,bg=Bp).grid(row=0,column=i,sticky='we') tk.Listbox(W,width=(H[k]%100)+1,selectmode='browse',fg=Fp,bg=Bp).grid(row=1,column=i,sticky='we') else: #Active tk.Label(W,text=k,relief='groove',fg=Fa,bg=Ba).grid(row=0,column=i,sticky='we') tk.Listbox(W,width=(H[k]%100)+1,selectmode='browse',fg=Fa,bg=Ba).grid(row=1,column=i,sticky='we') def TabHandler(event,r,c): #For events pass Table=DrawTable(TabHandler,{'Check1':0,'Check2':100,'NN':102,'Name':14,'Flag1':0,'Flag2':0,'Flag3':0,'Size':104,'File Name':119}) W.mainloop()
Офлайн
1
Очень интересно, спасибо!
Но некоторые моменты не совсем понятны. Самый главный - Вы опустили наполнение таблицы объектов для того что бы удилить внимание ключевым моментам? Или в некоторых случаях “return” не нужен?
И еще, скорее замечание, вариант с созданием виджетов с мгновенным размещением у меня частенько переставал работать с ошибкой, что объект еще не создан. Поэтому для себя я перестал экономить код на создании виджетов.
Офлайн
72
NiOl“return” нужен для возвращения значения функции, без “return” функция возвратит “None” (по умолчанию). Вы хотите чтобы функция DrawTable приняла вагон параметров и вернула пять вагонов хлама? Что вы хотите делать с тем, что возвращает функция? Как правило, такие функции ничего не возвращают, а “только рисуют картинку” для имеющихся данных.
Но некоторые моменты не совсем понятны. Самый главный - Вы опустили наполнение таблицы объектов для того что бы удилить внимание ключевым моментам? Или в некоторых случаях “return” не нужен?
Офлайн
1
Данные по созданной таблице конечно же будут нужны.
С ней (табличкой) еще работать придется, не простож так ее рисовать - и данными заполнить из файла, да и навигация (еще не продумал, как лучше синхронизировать скрол столбцов с распространением текущего активного элемента по остальным столбцам).
Вобщем, я зря надеялся, что “сейчас быстренько за пару недель” сделаю людям хорошо, вероятно, что вопросов впереди будет в разы больше, чем на текущий момент. Многое еще не укладывается в голове, как новая фигру в тетрисе ))) например еще обкуриваю “for i,k in enumerate(H)” - как это делать цикл сразу на 2 переменные одновременно? Если описание “enumerate” еще более-менее в инете отыскалось (встроенный help весьма беден и малопонятен
Офлайн
72
NiOlНу, это просто, у вас есть список (словарь, кортеж, строка и т. д.), например:
…например еще обкуриваю “for i,k in enumerate(H)” - как это делать цикл сразу на 2 переменные одновременно?
H=['a','b','c'] for element in H: #перечисляет сами элементы print(element) for number,element in enumerate(H): #перечисляет пары: номер и элемент print(number,element)
Офлайн