>

오른쪽 화살표 또는 왼쪽 화살표 키를 눌렀을 때 다음 이미지와 이전 이미지를 표시하는 방법은 무엇입니까? 나는 Example 를 정의하지 않을 때 간단한 예 에서이 작업을 수행했습니다.  아래 예제 코드에서 클래스를 사용하려고 할 때 실패했습니다. Example 내부에 두 개의 정적 메소드를 정의했습니다.  왼쪽 화살표와 오른쪽 화살표를 GUI에 바인딩하는 클래스입니다. 이벤트 인쇄에 잘 작동하지만 image 를 업데이트하는 방법을 모르겠습니다   configure(image = next_photo) 의 라벨 옵션  그리고 configure(image = previous_photo) . 내 코드의 일부는 다음과 같습니다.

current = 0
class Example(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.master.bind('<Left>', self.left_key)
        self.master.bind('<Right>', self.right_key)
        image = Image.open(image_list[0])
        image = image.resize((800, 600),Image.ANTIALIAS)
        photo = ImageTk.PhotoImage(image)
        self.logo = tk.Label(self, text="Logo", background="orange")
        self.logo2 = tk.Label(self, image = photo)
        ############################################# ScrolledText ##########################################
        self.edit_space = tkst.ScrolledText(
                master = self,
                wrap   = 'word',  # wrap text at full words only
                width  = 50,      # characters
                height = 10,      # text lines
                bg='beige'        # background color of edit area
        )
        self.other1 = tk.Label(self, background="purple")
        self.other2 = tk.Label(self, background="yellow")
        self.other3 = tk.Label(self, background="pink")
        self.other4 = tk.Label(self, background="gray")
        self.main = tk.Frame(self, background="blue")
        self.logo.grid(row=0, column=0, rowspan=1, sticky="nsew")
        self.logo2.grid(row=1, column=0, rowspan=1, sticky="nsew")
        self.other1.grid(row=0, column=1, sticky="nsew")
        self.other2.grid(row=0, column=2, sticky="nsew")
        self.other3.grid(row=1, column=1, sticky="nsew")
        self.other4.grid(row=1, column=2, sticky="nsew")
        self.edit_space.grid(row=2, column=0, sticky="nsew")
        self.main.grid(row=2, column=2, columnspan=2, rowspan=6)
        for row in range(8):
            self.grid_rowconfigure(row, weight=1)
        for col in range(3):
            self.grid_columnconfigure(col, weight=1)
    @staticmethod
    def left_key(event):
        print(str(event) + " key pressed")
        global current, image_list
        if not (0 <= current + 1 < len(image_list)):
            print("This is the first image")
            return
        current += 1
        image = Image.open(image_list[current])
        image = image.resize((800, 600),Image.ANTIALIAS)
        photo = ImageTk.PhotoImage(image)
        # self.logo2 = tk.Label(self, image = photo)
        #self.logo2.configure(image = photo)
    @staticmethod
    def right_key(event):
        print(str(event) + " key pressed")
        global current, image_list
        if not (0 <= current - 1 < len(image_list)):
            print("This is the last image")
            return
        current -= 1
        image = Image.open(image_list[current])
        image = image.resize((800, 600),Image.ANTIALIAS)
        photo = ImageTk.PhotoImage(image)
        # self.logo2 = tk.Label(self, image = photo)
        #self.logo2.configure(image = photo)
if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.geometry("800x400")
    root.mainloop()


  • 답변 # 1

    주된 문제는 지역 변수 photo 를 생성한다는 것입니다   __init__() 내부  그것을 logo2 의 이미지로 사용하십시오. . 그러나 photo   __init__() 후에 파괴 될 것입니다  이미지가 표시되지 않도록 실행됩니다.

    문제를 해결하려면 :

    self.photo 사용   photo 대신

    2 개의 정적 메소드 left_key() 변경  그리고 right_key() 인스턴스 메소드로

    logo2 의 이미지를 설정   left_key() 내부  그리고 right_key() : self.logo2.configure(image=self.photo)

    또한, current 의 가치를 확인   left_key() 내부  그리고 right_key()  문제가 발생할 수 있습니다 :

    left_key()

    current > 0  확인해야합니다

    right_key()

    current < len(image_list)-1  확인해야합니다

    current 의 조정  이 두 가지 방법에서 잘못된 방향입니다 :

    left_key()   current 를 줄여야한다

    right_key()   current 를 증가시켜야한다

  • 이전 javascript - 이벤트 핸들러를 위해 무슨 일이 벌어지고 있습니까? 다른 기능에도 적용됩니까?
  • 다음 math - 숫자 N을 나타내는 데 필요한 비트 수에 큰 O 경계를 부여하십시오