2017-08-24 100 views
0

我正在python中的一个小texteditor。随着app成为我的主人,我正试图实现一个textWidget,其中我想放置一个功能滚动条。tkinter滚动条在textWidget,howto

我面临的问题是以下几点:

  • 为了有一个textWidget把我的滚动条中,我必须先实现我的textWidget。但已经作为Tk.Text的一个参数,我需要为我的滚动条放置yscrollcommand。这意味着我的textWidget不会知道我的滚动条是什么。

如果我把它转过来,我无法在textWidget中创建我的滚动条,因为它尚未创建。

在我的textWidget首先创建

# MENU BAR EXAMPLE 
    menu_bar = Tk.Menu() 
    # Set menu bar as menu for the app 
    app.config(menu=menu_bar) 
    # Fill menubar with "File" menu 
    filemenu = Tk.Menu(app,menu_bar, tearoff=0) 
    #filemenu.add_command(label="Exit", command=exit) 
    menu_bar.add_cascade(label="File", menu=filemenu) 
    menu_bar.add_cascade(label="File2", menu=filemenu) 
    filemenu.add_command(label="Exit", command=exit) 

    # BUTTON EXAMPLE 
    button = Tk.Button(app, text="Exit", command=quit) 
    button.pack(side=Tk.BOTTOM, fill=Tk.X) 

    # TEXT WIDGET 

    textWidget = Tk.Text(textWidget, yscrollcommand=scrollbar.set) 
    textWidget.pack(expand=True,fill=Tk.BOTH) 

    # SCROLLBAR 

    scrollbar=Tk.Scrollbar(textWidget) 
    scrollbar.pack(side=Tk.RIGHT, fill= Tk.Y) 
    scrollbar.config(command=textWidget.yview) 

    #Start the main event loop (i.e. run the tkinter program) 
    app.mainloop() 


    ###################################################### 

第二个例子,其中创建滚动条第一

# MENU BAR EXAMPLE 
menu_bar = Tk.Menu() 
# Set menu bar as menu for the app 
app.config(menu=menu_bar) 
# Fill menubar with "File" menu 
filemenu = Tk.Menu(app,menu_bar, tearoff=0) 
#filemenu.add_command(label="Exit", command=exit) 
menu_bar.add_cascade(label="File", menu=filemenu) 
menu_bar.add_cascade(label="File2", menu=filemenu) 
filemenu.add_command(label="Exit", command=exit) 

# BUTTON EXAMPLE 
button = Tk.Button(app, text="Exit", command=quit) 
button.pack(side=Tk.BOTTOM, fill=Tk.X) 

# SCROLLBAR 
scrollbar=Tk.Scrollbar(textWidget) 
scrollbar.pack(side=Tk.RIGHT, fill= Tk.Y) 
scrollbar.config(command=textWidget.yview) 

# TEXT WIDGET 

textWidget = Tk.Text(textWidget, yscrollcommand=scrollbar.set) 
textWidget.pack(expand=True,fill=Tk.BOTH) 

而且这是我不得不这样做,使其工作第一个例子。但它感觉巴德曼如果我必须创建一个textWidget,创建一个滚动条,然后再次创建一个textWidget。

# MENU BAR EXAMPLE 
menu_bar = Tk.Menu() 
# Set menu bar as menu for the app 
app.config(menu=menu_bar) 
# Fill menubar with "File" menu 
filemenu = Tk.Menu(app,menu_bar, tearoff=0) 
#filemenu.add_command(label="Exit", command=exit) 
menu_bar.add_cascade(label="File", menu=filemenu) 
menu_bar.add_cascade(label="File2", menu=filemenu) 
filemenu.add_command(label="Exit", command=exit) 

# BUTTON EXAMPLE 
button = Tk.Button(app, text="Exit", command=quit) 
button.pack(side=Tk.BOTTOM, fill=Tk.X) 

# TEXT WIDGET 

textWidget = Tk.Text(app) 
textWidget.pack(expand=True,fill=Tk.BOTH) 

# SCROLLBAR 

scrollbar=Tk.Scrollbar(textWidget) 
scrollbar.pack(side=Tk.RIGHT, fill= Tk.Y) 

textWidget = Tk.Text(textWidget, yscrollcommand=scrollbar.set) # <--- Creating textWidget again 

#textWidget.pack(side=Tk.LEFT, fill=Tk.BOTH) 
scrollbar.config(command=textWidget.yview) 
textWidget.pack(expand=True,fill=Tk.BOTH) 


# Start the main event loop (i.e. run the tkinter program) 
app.mainloop() 

任何想法? =)

回答

0

这需要三个步骤:

  1. 创建文本组件
  2. 创建的滚动条,并将其链接到文本组件
  3. 链接文本组件的滚动条

如果需要,可以反转该顺序:创建滚动条,然后是文本,然后配置滚动条。另外,滚动条应该放置而不是放置在文本小部件中。文本小部件和滚动条通常共享相同的父项。

例子:

textWidget = Tk.Text(app) 
scrollbar = Tk.Scrollbar(app, command=textWidget.yview) 
textWidget.configure(yscrollcommand=scrollbar.set) 
+0

这工作很好,谢谢。问题以及为什么我最终将我的滚动条打包到textWidget中是因为如果我不这样做,我最终会在应用底部的滚动条界面中出现,而且textwidget只能伸展到滚动条界面的顶部。 – JohEker

+0

编辑。 如果首先创建滚动条,然后创建textWidget,则它将起作用。 滚动条将在应用程序中发生,并且在应用程序中发挥作用,然后textWidget将在应用程序的其余部分自行伸展 – JohEker