2017-02-28 84 views
0

我對Python很新,並且已經發布了一個小程序。在該程序中,用戶可以打開Toplevel窗口作爲彈出窗口,將地圖顯示爲圖像文件。我已經設法添加一個滾動條,並使圖像可滾動。可滾動的Toplevel窗口(tkinter)

滾動條的原因是支持不同的屏幕分辨率,以便如果顯示的圖像太大,用戶可以滾動彈出窗口的內容。

我現在想確保滾動條更改大小,當彈出窗口更改大小或由於缺少屏幕大小而未完全拉伸時。到目前爲止,只要縮小窗口大小,滾動條就會消失。

這裏是我的功能karte()打開的彈出窗口:

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

你需要.rowconfigure().columnconfigure()方法來得到你想要的東西給你使用的是網格系統佈局小部件。

爲了進一步幫助您,我已經註釋了您的部分代碼。雖然您的代碼顯示圖像,但它不是在Canvas中創建圖像的正確方法。您的圖像是在坐在Canvas頂部的Frame中創建的。因此,即使您可以看到圖像和滾動條,您也無法滾動圖像。改用我給你的正確代碼。

最後的評論。學會在未來提供簡化的完整代碼,以便您可以更快地吸引幫助。您可以閱讀關於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()