python figure函数 gui_python 在一个GUI内创建了2个figure,为什么只能显示第二个图?...

建议你把代码格式化一下,编辑框上有代码块选项,选中代码再点击如下图标就可以格式化。

说说这段代码的问题。因为tk我没怎么用过,说明如果有错,帮忙指正。

def figure(self):

f1=Figure((4,3))

self.f11=f1.add_subplot(111)

self.canvas=FigureCanvasTkAgg(f1,self.root)

self.canvas.get_tk_widget().place(x=0,y=50)

f2=Figure((4,3))

self.f22=f2.add_subplot(111)

self.canvas=FigureCanvasTkAgg(f2,self.root)

self.canvas.get_tk_widget().place(x=400,y=50)

首先你要理解什么是canvas,它的英文解释帆布、油画布。可以理解为画纸。梳理下上面的逻辑:创建一个名为f1的figure;

在f1中创建了名为f11的plot;

创建了名为canvas的画布,并传入名为f11为figure;

创建一个名为f2的figure;

在f1中创建了名为f22的plot;

创建了名为canvas的画布,并传入名为f22为figure;

canvas前后被赋值两次,但canvas只能指向一张画纸。指向了第二张必然失去对第一张的引用,第一张画纸就被清理掉。画纸上只能有一个figure,f1是挂在第一张上的,此时在f1中的f11上作画,其实就相当于在空中挥笔,毫无痕迹。

修改之后的代码是什么样子,如下:

lass Ra:

def __init__(self):

self.root = Tk()

self.x = np.arange(0, 1, 0.01)

self.root.title('Ra')

self.root.geometry('800x400+300+100')

self.canvas = Canvas()

self.figure()

self.radio_button()

self.root.mainloop()

def figure(self):

f = Figure((8, 3))

self.plot1 = f.add_subplot(1, 2, 1)

self.plot2 = f.add_subplot(1, 2, 2)

self.canvas = FigureCanvasTkAgg(f, self.root)

self.canvas.get_tk_widget().place(x=10, y=50)

def radio_button(self):

var = StringVar()

r1 = Radiobutton(self.root, text='sin', variable=var, value='A', command=self.sin)

r1.place(x=10, y=10)

r2 = Radiobutton(self.root, text='cos', variable=var, value='B', command=self.cos)

r2.place(x=150, y=10)

def sin(self):

self.plot1.clear()

self.y = np.sin(self.x)

self.plot1.plot(self.x, self.y)

self.canvas.draw()

def cos(self):

self.plot2.clear()

self.yy = np.cos(self.x)

self.plot2.plot(self.x,self.yy)

self.canvas.draw()

if __name__=='__main__':

ra=Ra()

主要看其中一段

def figure(self):

f = Figure((8, 3))

self.plot1 = f.add_subplot(1, 2, 1)

self.plot2 = f.add_subplot(1, 2, 2)

self.canvas = FigureCanvasTkAgg(f, self.root)

self.canvas.get_tk_widget().place(x=10, y=50)

首先创建了名为f的figure,通过add_subplot在其中画了两个plot,布局为一行两列。然后将这个figure附在了某张画布上。此时只有一个canvas,作出的画就可以展示了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值