2017-02-28 1 views
0

저는 파이썬을 처음 접했고 약간의 프로그램을 삭제했습니다. 이 프로그램에서 사용자는지도를 이미지 파일로 보여주는 팝업으로 Toplevel 창을 열 수 있습니다. 스크롤 막대를 추가하고 이미지를 스크롤 가능하게 만들었습니다.Scrollable Toplevel Window (tkinter)

스크롤 막대의 이유는 표시된 이미지가 너무 크면 사용자가 팝업 내용을 스크롤 할 수 있도록 다른 화면 해상도를 지원하기 위해서입니다.

이제 팝업 창이 크기가 변경되거나 화면 크기가 누락되어 완전히 늘어나지 않은 경우 스크롤바의 크기가 변경되도록하고 싶습니다. 지금까지 창 크기를 줄이면 스크롤바가 사라집니다. 당신은 당신이 당신의 위젯을 배치하기 위해서 그리드 시스템을 사용하고 주어진 원하는 것을 얻을 수 .rowconfigure().columnconfigure() 방법이 필요

def karte(pfad,header,source): 
    popup = Toplevel() 
    popup.title(header) 

    ksbar=Scrollbar(popup, orient=VERTICAL) 
    ksbar.grid(row=0, column=1, sticky="ns") 

    popCanv = Canvas(popup, width=600, height = 800, scrollregion=(0,0,500,500)) #width=1256, height = 1674) 
    popCanv.grid(row=0, column=0) 

    ksbar.config(command=popCanv.yview) 
    popCanv.config(yscrollcommand = ksbar.set) 

    kframe=Frame(popCanv, width=600, height = 800) 
    kframe.grid(row=0, column=0) 

    img = PhotoImage(master=kframe, file=pfad) 
    imglabel = Label(kframe, image = img) 
    imglabel.image = img 
    imglabel.grid() 
    popCanv.create_text(420,790,text=source) 

    popup.mainloop() 
+0

제목에 Tkinter를 추가 만 기능을 간단한 작업 코드를 제공하는 대신 단지에 – abccd

+0

당신이 볼 수를 태그하세요? 이것은 당신을 더 쉽게 도와 줄 것입니다. –

답변

0

:

여기에 팝업 창을 엽니 다 내 기능 karte()입니다.

더 도움을 드리기 위해 코드 섹션을 주석 처리했습니다. 코드에 이미지가 표시되었지만 Canvas에서 이미지를 만드는 올바른 방법이 아닙니다. 귀하의 이미지는 캔버스 위에 앉아 프레임에 만들어졌습니다. 따라서 이미지와 스크롤바를 볼 수는 있지만 이미지를 스크롤 할 수는 없습니다. 대신에 내가 준 올바른 코드를 사용하십시오.

마지막 코멘트. 앞으로 도움이 될 수 있도록 단순화 된 완전한 코드를 제공하는 방법을 배우십시오. mcve here에 대한 자세한 내용을 볼 수 있습니다.

from tkinter import * 

class App(Frame): 
    def __init__(self, parent, *args, **kwargs): 
     Frame.__init__(self, parent, *args, **kwargs) 
     header = "Toplevel" 
     pfad = "NYCGifathon24-3.png" # change this to your image name 
     source = "Canvas Image" 
     self.karte(pfad,header,source) 

    def karte(self, pfad,header,source): #added 'self' 
     popup = Toplevel() 
     popup.title(header) 

     ksbar=Scrollbar(popup, orient=VERTICAL) 
     ksbar.grid(row=0, column=1, sticky="ns") 

     popCanv = Canvas(popup, width=600, height = 800, 
         scrollregion=(0,0,500,800)) #width=1256, height = 1674) 
     popCanv.grid(row=0, column=0, sticky="nsew") #added sticky 

     ksbar.config(command=popCanv.yview) 
     popCanv.config(yscrollcommand = ksbar.set) 

     ## Commented codes are inappropriate. 
     ## Wrong way to create an image in Canvas. 
     ## Your scrollbars will not be able to scroll the image either 
     #kframe=Frame(popCanv, width=600, height = 800) 
     #kframe.grid(row=0, column=0) 
     #img = PhotoImage(master=kframe, file=pfad) 
     #imglabel = Label(kframe, image = img) 
     #imglabel.image = img 
     #imglabel.grid() 
     self.img = PhotoImage(file=pfad) #amended 
     image = popCanv.create_image(300, 400, image=self.img) #correct way of adding an image to canvas 
     popCanv.create_text(420,790,text=source) 

     popup.rowconfigure(0, weight=1) #added (answer to your question) 
     popup.columnconfigure(0, weight=1) #added (answer to your question) 

     #popup.mainloop() 

if __name__ == "__main__": 
    root = Tk() 
    app = App(root) 
    root.mainloop() 
관련 문제