繁体   English   中英

可滚动的顶层窗口(tkinter)

[英]Scrollable Toplevel Window (tkinter)

我是Python的新手,并已开发了一个小程序。 在该程序中,用户可以打开一个顶级窗口作为弹出窗口,该窗口将地图显示为图像文件。 我设法向其中添加了一个滚动条,并使图像可滚动。

滚动条的原因是支持不同的屏幕分辨率,因此,如果显示的图像太大,则用户可以滚动弹出窗口的内容。

现在,当弹出窗口更改大小或由于缺少屏幕大小而没有完全拉伸时,我现在要确保滚动条更改大小。 到目前为止,只要缩小窗口大小,滚动条就会消失。

这是我的功能,可打开弹出窗口:

如果使用网格系统来布局小部件,则需要.rowconfigure().columnconfigure()方法来获取所需的内容。

为了进一步帮助您,我已注释掉您的部分代码。 尽管您的代码显示了图像,但这不是在Canvas中创建图像的正确方法。 您的图像是在“画布”顶部的框架中创建的。 因此,尽管您可以看到图像和滚动条,但您也将无法滚动图像。 请改用我给您的正确代码。

最后评论。 将来一定要学习提供简化的完整代码,以便您更快地获得帮助。 您可以在此处阅读有关mcve的更多信息。

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM