2017-02-28 85 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()