사용자가 사진을 선택하고 참조를 위해 창에서 볼 수있는 간단한 파이썬 GUI 프로그램을 구현하려고합니다.
내 코드는 다음과 같습니다.
from tkinter import *
from tkinter.filedialog import askopenfilename
from PIL import Image, ImageTk
filename = "none"
photo1 = ImageTk.PhotoImage
def fileSelect():
global filename
filename = askopenfilename() #input file
global photo1
imageShow = Image.open(filename)
imageShow = imageShow.resize((300, 350), Image.ANTIALIAS)
photo1 = ImageTk.PhotoImage(imageShow)
window = Tk() #Creating window
window.title("Example") #Title of window
imageFirst = Image.open("first.jpg")
imageFirst = imageFirst.resize((300, 350), Image.ANTIALIAS)
photo1 = ImageTk.PhotoImage(imageFirst)
Label (window, image=photo1, bg="white").pack(pady=30) #Display image
Button(window, text="Select File", font="none 16", width=15, command=fileSelect).pack(pady=15)
window.mainloop()
보시다시피 photo1
, fileSelect()
함수가 액세스하고 변경할 수 있도록 전역으로 선언 됩니다. 프로그램이 시작되면 나중에 사용자가 선택한 이미지로 대체 될 기본 초기 이미지를 표시합니다.
내가 직면 한 문제는 사용자가 이미지를 선택한 후 원본 사진이 사라지지만 새로 선택한 이미지가 나타나지 않는다는 것입니다. 왜 이런 일이 일어나는지 이해할 수 없습니다. 도와주세요.
자, 다음과 같이 레이블을 변경하여 시작하여 None
.
img_l = Label(window, image=photo1, bg="white")
img_l.pack(pady=30) #Display image
그런 다음 기능을 다음과 같이 변경하십시오.
def fileSelect():
global filename, photo1 #keeping reference
filename = askopenfilename() #input file
imageShow = Image.open(filename).resize((300, 350), Image.ANTIALIAS)
photo1 = ImageTk.PhotoImage(imageShow) #instantiate
img_l.config(image=photo1) #updating the image
이 config()
메서드는 레이블의 이미지를 업데이트하므로 PhotoImage 인스턴스의 이미지를 변경하면 도움이되지 않습니다.
또한 photo1 = ImageTk.PhotoImage
사용하지 않으므로 코드 상단을 제거 할 수도 있습니다.
파일을 선택하지 않으면 여전히 오류가 반환됩니다. 방법은 다음과 같습니다.
def fileSelect():
global filename, photo1
try:
filename = askopenfilename() #input file
imageShow = Image.open(filename).resize((300, 350), Image.ANTIALIAS)
photo1 = ImageTk.PhotoImage(imageShow)
img_l.config(image=photo1)
except AttributeError:
pass
이것이 오류를 해결하기를 바랍니다. 의심스러운 점이 있으면 알려주십시오.
건배
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다