我创建了一个Tkinter类Ext(),其中包含create_scrollbar()方法中variabel self.text中任何文本的滚动条。我想通过将它绑定到类Application中的Buttons来使用此方法,以便在按下Button时文本显示在滚动条中。我已经尝试将其作为一个类首先实现,但是当在同一个类中使用两个 init 时会导致问题。如何在Applications类中的callback,self.callback中调用Ext中的create_scrollbar?
from Tkinter import *
import Tkinter as tk
class Ext(tk.Frame):
""" a scrollbar creation class, extends the class Application"""
def __init__(self, master):
""" init the frame """
tk.Frame.__init__(self)
self.text = tk.StringVar()
tk.Frame.__init__(self, master)
self.scrollbar = tk.Canvas(master, borderwidth=0, background="#ffffff")
self.frame = tk.Frame(self.scrollbar, background="#ffffff")
self.txt = tk.Scrollbar(master, orient="vertical", command=self.scrollbar.yview)
self.scrollbar.configure(yscrollcommand=self.txt.set)
self.scrollbar.configure(width=500, height=200)
self.txt.pack(side="right", fill="y")
self.scrollbar.pack(side="left", fill="both", expand=True)
self.scrollbar.create_window((0,0), window=self.frame, anchor="nw",
tags="self.frame")
self.create_scrollbar()
def create_scrollbar(self):
tk.Label(self.frame, text=self.text).grid(column=1)
class Application(Frame):
def __init__(self, root):
""" init the frame """
Frame.__init__(self)
self.grid()
self.create_widgets()
def create_widgets(self):
Button = Button(self, text = "Display scrollbar!", command = self.callback)
Button.grid(row = 10, column = 1, sticky = W)
def callback(self):
self.text = "this is a test sentence
print create_scrollbar(t) # Print scrollbarwidget from the Ext() class when the Button is pressed
#Main
root = Tk()
root.title("Maltparser1.0_demo")
root.geometry("900x700")
root.mainloop()
app = Application(root)
master = tk.Tk()
master = Ext(master)
master.title("Instructions")
master.geometry("800x300")
Ext(master).pack(side="top", fill="both", expand=True)
master.mainloop()
答案 0 :(得分:0)
要回答您的具体问题,要调用create_scrollbar
方法,首先需要创建该类的实例。例如:
def callback:
e = Ext(self)
e.create_scrollbar()
然而,这不符合您的想法,因为您永远不会告诉它要显示的文本。在callback
中,self.text
生活在App
班级,而不是Ext
班级。也许你想将字符串或textvariable传递给Ext
类的构造函数。
顺便说一下,你的代码非常令人困惑。您创建了一个名为self.frame
的框架 - 这是有意义的 - 但是一个名为self.scrollbar
的画布,一个名为self.txt
的滚动条和一个名为self.text
的stringvar。然后,您有一个名为create_scrollbar
的方法,它创建一个标签。最后,您从类Button
创建一个按钮,然后将其命名为Button
。您不能同时拥有具有相同名称的类和实例。
也许这些名字对你有意义,但作为不属于你的人,我认为你的名字选择会使你的代码难以理解。