2014-12-17 10 views
0

моя цель: иметь фоновое изображение, которое занимает полное окно дисплея. И затем на нем, поместите кнопки изображения, которые будут хорошо центрированы в этом окне (кнопки расположены в сетке). Изображение 1920X1080. У меня есть другой фрагмент кода, который следует точно такой же последовательности, и изображение появляется в фоновом режиме. Так полностью сбито с толку. Но хотелось правильно понять логику этого кода/вместо того, чтобы полагаться на удачу! .. Обратите внимание, что на другом рабочем коде я занимаюсь как местом, так и сеткой background_label !. С помощью этого кода кнопки вообще не отображаются. , когда я использую background_label (content ....), изображение появляется в фоновом режиме с кнопками спереди, но в этом случае все окно дисплея не занято. Изображение просто расширяется, чтобы заполнить область, занимаемую изображениями кнопок.фоновое изображение не работает правильно

root = Tk() 
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight())) 

content = ttk.Frame(root, padding=(3,3,12,12)) 
print(root.winfo_screenwidth(), root.winfo_screenheight()) 
#prints as 1920 & 1080 

#old background_image_file='waves1600x926.gif' 

background_image_file='Lake.gif' #this is 1080X1920 
background_image=PhotoImage(file=background_image_file) 
background_label =ttk.Label(root,image=background_image) #tried content instead of root also 
background_label.place(x=0, y=0,relwidth=1, relheight=1) 
background_label.grid() 

logos=['abc','cbs','nbc','fox','cnbc','amc','bet'] 
logobuttons=defaultdict(str) 
logoimgs=defaultdict(str) 
for logo in logos: 

    logoimgs[logo]=PhotoImage(file=LOGODIR+logo+'.gif') 

    logobuttons[logo]=ttk.Button(content,image=logoimgs[logo]) 


content.grid(column=0, row=0, sticky=(N,S,E,W)) 

col=0 
row=0 
maxcols=5 
for logo in logos: 
    logobuttons[logo].grid(row=row,column=col,pady=5,padx=5) 
    if col == maxcols: 
     col=0 
     row=row+1 
    else: 
     col=col+1 

root.mainloop() 
+0

Что вы хотите сказать? Просто генерал «почему это не работает»? –

+0

Мой вопрос: что я должен изменить, чтобы он отображал кнопки поверх изображения. – jvi

ответ

0

При одновременном использовании place и grid, только последний один вы вызываете для данного виджета имеет никакого эффекта. Таким образом, когда вы вызываете background_label.grid(), он полностью отрицает эффект background_label.place(...). Другими словами, для этого виджета необходимо удалить вызов grid.

Если вы хотите получить фоновое изображение, лучшим решением будет использование места с относительной шириной и высотой 1. Сначала вы должны создать виджет, содержащий изображение, поэтому он является самым низким в порядке укладки. Хотя, вы всегда можете опустить его позже.

+0

У меня есть: background_label.place (x = 0, y = 0, relwidth = 1, relheight = 1) – jvi

+0

У меня есть это, как вы говорите: background_label.place (x = 0, y = 0, relwidth = 1, relheight = 1). Ярлык также создается для других (у меня есть контент, созданный до него, но это потому, что я попытался использовать фоновую метку, созданную с содержимым в качестве родителя). Мой вопрос: что я должен изменить, чтобы он отображал кнопки поверх изображения. Thnks – jvi

+0

Ваш фон должен быть первым виджемом, который вы создаете. Виджеты создаются в стеке. Поскольку ваш код теперь, ярлык находится над 'content', поэтому все, что содержится в' content', будет меньше метки –

Смежные вопросы