1

tkinter에서 창이나 배경 이미지를 표시 할 수 있습니다. 한 번에 두 가지를 모두 표시하는 방법에 대한 제안이있는 사람이 있습니까 (객체가 배경 이미지로 이동하게 할 수 있습니다). 아래 :Tkinter 캔버스가 이미지를 표시하지 않습니다.

from tkinter import * 
from tkinter import ttk 


root= Tk() 
# Code to add widgets will go here... 
root.title("MTGO Daily Decklists") 
def test(): 
    print("things") 

# pick a .gif image file you have in the working directory 
# or give full path 
image1 = PhotoImage(file="backgroundimage.gif") 
w = Canvas(root, width=800, height=700,) 
background = PhotoImage(file = "backgroundimage.gif") 
w.create_image(500, 500, image=image1) 
w.pack() 
format_mtg= StringVar() 
format_entry= ttk.Entry(w, width=25, textvariable=format_mtg) 
format_entry_window = w.create_window(10, 10, anchor='n', window=format_entry) 
format_entry.pack() 
date= StringVar() 
date_entry=ttk.Entry(root, width=25, textvariable=date) 
date_entry_window = w.create_window(10, 10, anchor='n', window=date_entry) 
date_entry.pack() 
ttk.Label(w, text="input format here").pack() 
ttk.Button(w, text="fetch", command=test).pack() 
ttk.Label(w, text="input date here").pack() 
sortby= StringVar() 
sortby_entry= ttk.Entry() 
sortby_entry.pack() 
ttk.Label(w, text="input how you want the decklists to be sorted").pack() 
root.mainloop() 
+0

배경 이미지에서 캔버스 이미지를 만들려는 시도가 없습니다. – TigerhawkT3

+0

죄송합니다, 내가 w.create_image (500, 500, 이미지 = 배경) 에 w.create_image (500, 500, 이미지 = image1을)를 변경하지만 이미지 '로 변경하면 여전히 같은 문제 – dovefromhell

+0

있다 = background','image1'을위한 캔버스 이미지를 만들기 위해 라인을 추가 했습니까? 아니면 하나의 이미지 만 만들었습니까? – TigerhawkT3

답변

0

이미지의 중심을 500x500에 배치합니다. 그러나 프로그램이 시작된 후 창은 약 300x200에 불과합니다. 귀하의 이미지는 그곳에있을 가능성이 있지만 화면의 보이는 부분에서 벗어납니다.

캔버스의 크기를 800x700으로 설정하더라도 캔버스 내부에 위젯을 포장합니다. 이렇게하면 내용에 맞게 캔버스가 축소됩니다. 그 결과, 캔버스를 패킹 할 때 expand 또는 fill 옵션을 사용하지 않으므로 최종 결과는 GUI의 내부가 최소 크기로 축소된다는 것입니다.

참고 : 캔버스에 창을 추가 할 create_window를 사용하는 경우, 당신은 또한 창 grid 또는 pack를 호출하지한다. create_window 또는 pack 중 하나만 호출해야하지만 둘 다 호출해야합니다. 마지막으로 부르는 것은 효과가있는 것입니다.

많은 솔루션이 있으며, 그 선택은 궁극적 인 목표에 달려 있습니다. 창 크기 또는 내용의 크기에 관계없이 캔버스의 높이를 800x700으로 설정하려면 캔버스 내부에서 형상 전파를 해제 할 수 있습니다. 예를 들어 :

w.pack_propagate(False) 

당신은 또한 주어진 공간을 채우기 한 후 왼쪽 상단에 배경 이미지를 고정 할 수있는 캔버스를 포장 할 수있다. 예 :

w.pack(fill="both", expand=True) 
w.create_image(0, 0, image=image1, anchor="nw") 

캔버스 사용을 중지하고 배경 이미지를 레이블에 넣을 수도 있습니다. 그런 다음 place을 사용하여 기본 창에서 레이블을 가운데에 맞출 수 있습니다. 예 :

background_label = Label(root, image=image1) 
background_label.place(relx=.5, rely=.5) 
+0

일해 주셔서 대단히 감사합니다. – dovefromhell