class QuadEQPlot:
width=0;height=0;centerh=0;centerw=0;root=None
def __init__(self):
root = Tk()
root.title("Quadratic Equation Plot")
width = 1200
height = 800
centerh = height/2
centerw=width/2
def init_widgets(self,a,b,c):
canvas_frame = Canvas(QuadEQPlot.root,width=QuadEQPlot.width, height=QuadEQPlot.height, bg='white')
self.plot_axis(QuadEQPlot.root,QuadEQPlot.width,QuadEQPlot.height,QuadEQPlot.centerh,QuadEQPlot.centerw,canvas_frame)
#start point
x=-5.00
xy = [] #array of points
while (x<6):
# x coordinates
xy.append(x*9 + QuadEQPlot.centerw)
# y coordinates
xy.append(QuadEQPlot.centerh - (a*(x**2) +b*x +c)*9 )
x+=0.01
#plot all accumulated points
quad_line = canvas_frame.create_line(QuadEQPlot.root,xy, fill='blue')
canvas_frame.pack()
root.mainloop()
def plot_axis(self,root,width,height,centerh,centerw,canvas_frame):
# x and y axis plot
center_line = canvas_frame.create_line(root,0, centerh, width, centerh, fill='black')
center_line = canvas_frame.create_line(root,centerw, 0, centerw, height, fill='black')
diffx=9
markno=1
# marking on x axis
while(diffx<=centerw and markno<7):
xrmarking=canvas_frame.create_line(root,centerw+diffx,centerh,centerw+diffx,centerh+5,fill='black')
# marking text on rhs of x axis
xrtext=canvas_frame.create_text(root,centerw+diffx,centerh+12,text="%d" %markno,fill='black')
xlmarking=canvas_frame.create_line(root,centerw-diffx,centerh,centerw-diffx,centerh+5,fill='black')
#marking text on lhs of x axis
xltext=canvas_frame.create_text(root,centerw-diffx,centerh+12,text="-%d" %markno,fill='black')
markno+=1
diffx+=9
#zerotext=canvas_frame.create_text(centerw+5,centerh+9,text="0",fill="black")
diffy=0
markno=0
# marking on y axis
while(diffy<=centerh):
yrmarking=canvas_frame.create_line(root,centerw,centerh+diffy,centerw+5,centerh+diffy,fill='black')
#yrtext=canvas_frame.create_text(centerw+12,centerh+diffy,text="%d" %markno,fill='black')
ylmarking=canvas_frame.create_line(root,centerw,centerh-diffy,centerw+5,centerh-diffy,fill='black')
#yltext=canvas_frame.create_text(centerw+12,centerh-diffy,text="%d" %markno,fill='black')
#markno+=1
diffy+=9
我从另一个使用网格的tkinter框架的类调用这个类。但是这个类不使用它,并且在canvas_frame.pack()
行上给出错误“cannot use geometry manager pack inside”。已经有了由电网管理的奴隶
调用函数的代码:
^{pr2}$调用类代码:
class CoefficientsDialog:
def __init__(self):
master = Tk()
master.minsize(width=200, height=100)
#master.pack()
Label(master, text="X^2 +").grid(row=2,column=5)
Label(master, text="X +").grid(row=4,column=5)
e1 = Entry(master)
e2 = Entry(master)
e3 = Entry(master)
a=0;b=0;c=0
e1.grid(row=2, column=3)
e2.grid(row=4, column=3)
e3.grid(row=6, column=3)
try:
a=int(e1.get())
b=int(e2.get())
c=int(e3.get())
except ValueError as e:
a=0;b=1;c=0
#Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4)
Button(master, text='Submit', command=lambda : self.submit(a,b,c)).grid(row=8, column=3, sticky=W, pady=4)
master.mainloop( )
def submit(self,a,b,c):
obj=QuadEQPlot()
obj.init_widgets(a,b,c)
如果您使用这种结构,那么很容易保持对您所拥有的不同视图的了解。此外,它允许您同时运行不同的根窗口:
这显示了一个简单的应用程序,它使用三个类,一个是根,另一个是示例页。要切换到具有相同根类的不同帧,只需调用
controller.show_frame(FRAMENAME)
,这将切换位于顶部的帧。要拥有多个不同的根,您只需创建一个新的根类,并以相同的方式构造和填充它。在相关问题 更多 >
编程相关推荐