在我的Tkinter GUI小部件中,我想将绘图放在绘图区域(绘图框)中。然而,我有几个问题
无论我向小部件添加了多少列,绘图框架都不会覆盖整个屏幕。我想要尽可能大的图
图形不是从帧的顶部开始的。但是文本是带有轴(“off”)的子地块,从顶部开始
无法将导航工具栏设置为保存绘图框的全部内容
如果你能提出建议,我将不胜感激
from tkinter import *
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
from matplotlib.backends._backend_tk import NavigationToolbar2Tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
def main ():
root = Tk()
w , h = root.winfo_screenwidth() , root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w , h))
root.resizable(width=True , height=True)
root.title("Form")
root.configure(bg='Dodgerblue4')
root.state('zoomed')
top_frame = Frame(root , bg='Dodgerblue4' ,borderwidth=2, bd=1, relief= SUNKEN, pady=10)
frameX = Frame(root , bg='Dodgerblue4' ,borderwidth=2, bd=1 , relief=SUNKEN, padx = 15, pady = 10)
frameY = Frame(root , bg='Dodgerblue4' ,borderwidth=2, bd=1 , relief=SUNKEN, padx = 15, pady = 10)
submitframe = Frame(root , bg='Dodgerblue4' ,borderwidth=2, bd=1 , relief=SUNKEN)
plotframe = Frame(root , bg='Dodgerblue4' ,borderwidth=2, bd=1 , relief=SUNKEN)
# plotframe = Canvas(root , bg='Dodgerblue4' ,borderwidth=2, bd=1 , relief=SUNKEN)
top_frame.grid(column=0, row=0, sticky="nsew", columnspan= 20)
top_frame.grid_columnconfigure(0 , weight=1)
frameX.grid(column=0, row=1, sticky="nsew", columnspan = 2, rowspan = 6)
frameY.grid(column=0, row=7, sticky="nsew", columnspan = 2, rowspan = 16)
submitframe.grid(column=2, row=1, sticky="nsew", rowspan = 22)
submitframe.grid_rowconfigure(0 , weight=1)
plotframe.grid(column=3, row=1, sticky="nsew", rowspan = 22, columnspan = 17 )
plotframe.grid_rowconfigure(0 , weight=1)
plotframe.grid_columnconfigure(0 , weight=1)
label_top = Label(top_frame , text="Design Page" , font=('' , '15' , ''), bg='Dodgerblue4' , fg='white', justify=CENTER).grid(row=0, column=0,columnspan= 20)
# ------------------------------------------Xs-------------------------------------------------------------------------
X1 = Label(frameX, text='X1', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row=1, column=0, sticky = W)
X2 = Label(frameX, text='X2', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row=2, column=0, sticky = W)
X3 = Label(frameX, text='X3', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row=3, column=0, sticky = W)
X4 = Label(frameX, text='X4', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row=4, column=0, sticky = W)
X5 = Label(frameX, text='X5', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row=5, column=0, sticky = W)
X6 = Label(frameX, text='X6', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row=6, column=0, sticky = W)
# -------------------------------------------Ys--------------------------------------------------------------------
label_spec = Label(frameY, text='the parameters', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row=0, column=0, columnspan = 2)
Y1 = Label(frameY, text='Y1', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 1, column= 0, sticky = W)
Y2 = Label(frameY, text='Y2', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 2, column= 0, sticky = W)
Y3 = Label(frameY, text='Y3', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 3, column= 0, sticky = W)
Y4 = Label(frameY, text='Y4', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 4, column= 0, sticky = W)
Y5 = Label(frameY, text='Y5', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 5, column= 0, sticky = W)
Y6 = Label(frameY, text='Y6', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 6, column= 0, sticky = W)
Y7 = Label(frameY, text='Y7', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 7, column= 0, sticky = W)
Y8 = Label(frameY, text='Y8', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 8, column= 0, sticky = W)
Y9 = Label(frameY, text='Y9', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 9, column= 0, sticky = W)
Y10 = Label(frameY, text='Y10', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 10, column= 0, sticky = W)
Y11 = Label(frameY, text='Y11', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 11, column= 0, sticky = W)
Y12 = Label(frameY, text='Y12', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 12, column= 0, sticky = W)
Y13 = Label(frameY, text='Y13', fg='white', bg='Dodgerblue4', font=('' , '12' , ''), justify=CENTER).grid(row= 13, column= 0, sticky = W)
submit_button = Button(submitframe, text='Submit', font=('' , '12' , ''), padx=10, relief=RIDGE, activebackground='green' , bg='orange' , bd=5).grid(row=0 , column=0 , rowspan=10 , ipady=10)
x = [-100 , 100]
y = [0 , 4]
fig = plt.figure( facecolor='#104e8b' , edgecolor='k')
gs = GridSpec(13 , 7)
ax1 = fig.add_subplot(gs[0:8 , 0:5])
ax1.plot(x , y , 'b-' , label=' Profile 1')
plt.xlabel(' x1 (mm) ' , color='w')
plt.ylabel(' y1 (mm)' , color='w')
plt.legend(loc='lower left')
ax2 = fig.add_subplot(gs[8:13 , 5:6])
ax2.text(0.5 , 0.5 ,
"The Specifications: \n Y1 \n\n Y2, \n\n Y3, \n\n Y4, \n\n Y5,\n\n Y6, \n\n Y7, \n\n Y8, "
"\n\n Y9,\n\n Y10, \n\n Y11, \n\n Y12, \n\n Y13",
style='normal' , color='w' , fontsize=10 ,
bbox={'facecolor': 'blue' , 'alpha': 0. , 'pad': 10}
)
ax2.axis('off')
ax3 = fig.add_subplot(gs[10:13 , 0:5])
ax3.plot(x , y , 'b-' , label=' Profile 2')
plt.xlabel(' x2 (mm) ' , fontsize=10 , color='w')
plt.ylabel(' y2 (mm)' , fontsize=10 , color='w')
canvas = FigureCanvasTkAgg(fig , master=plotframe) # A tk.DrawingArea.
canvas.draw()
canvas.get_tk_widget().grid(row=0 , column=0 , sticky='nsew')
# toolbar = NavigationToolbar2Tk(canvas , plotframe)
# toolbar.update()
# canvas.get_tk_widget().grid(row=1 , column=0)
# fig.tight_layout()
root.mainloop()
if __name__ == '__main__':
main()
.grid()方法的作用与您认为的不同。添加列和行并不一定会扩大小部件的大小,因为Tkinter总是试图将小部件打包到尽可能小的空间中。要增加图形大小,只需在定义fig变量时添加参数
figsize=(x,y)
。根据您的喜好调整x和y通过在
gs = fig.add_gridspec(13, 7)
行中包含参数top=1
,可以将绘图凹凸到帧的顶部。我相信网格规范正试图将13x7网格居中,因此在覆盖它之前,它的“顶部”实际上并不在网格的顶部我不太确定这个答案,但是This link似乎也有同样的问题,通过创建一个空框架,然后嵌入小部件并打包到该框架中来解决它。但是,它将与root()框架分开
您现在唯一的问题是文本与绘图顶部有点不对齐。我建议添加
verticalalignment='top'
,并且只将其放在第0行,以始终将其放在网格区域的顶部总而言之,以下是修复1和2需要替换的两行代码:
fig = plt.figure(facecolor='#104e8b', edgecolor='k', figsize=(16,16))
gs = fig.add_gridspec(13, 7,top=1)
要修正文本对正,请执行以下操作:
相关问题 更多 >
编程相关推荐