Python 为什么我不能在canava绘图之后使用grid()添加任何内容?我怎样才能使情节扩大呢
您好,我正在使用Tkinter为我的应用程序设计GUI。我使用grid()将对象放置在起始页(4个按钮、绘图、绘图工具栏和文本输入) 在我为绘图添加canava之前,一切都正常,之后我无法使用grid()添加任何内容,第二个问题:我想知道如何使用相同的方法grid()在X轴上展开绘图Python 为什么我不能在canava绘图之后使用grid()添加任何内容?我怎样才能使情节扩大呢,python,python-2.7,python-3.x,tkinter,tkinter-canvas,Python,Python 2.7,Python 3.x,Tkinter,Tkinter Canvas,您好,我正在使用Tkinter为我的应用程序设计GUI。我使用grid()将对象放置在起始页(4个按钮、绘图、绘图工具栏和文本输入) 在我为绘图添加canava之前,一切都正常,之后我无法使用grid()添加任何内容,第二个问题:我想知道如何使用相同的方法grid()在X轴上展开绘图 要添加条目您必须为小部件设置父项——在您的代码中,它将是self textbox1 = tk.Entry(self, width= 75) 问题在于NavigationToolbar2TkAgg因为它似乎需要pa
要添加
条目
您必须为小部件设置父项
——在您的代码中,它将是self
textbox1 = tk.Entry(self, width= 75)
问题在于NavigationToolbar2TkAgg
因为它似乎需要pack()
管理器才能工作,而且它还强制使用pack()
管理器来管理FigureCastkagg
您可以使用grid()
放置Frame
,然后使用`pack()将NavigationToolbar2TkAgg
和figurecastkagg
放置在Frame
内部
完整工作版本:
import matplotlib
matplotlib.use('TkAgg')
import tkinter as tk
from tkinter import ttk
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
# implement the default mpl key bindings
#from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
class moshGUI(tk.Tk):
def __init__(self, *args, **kwargs): #kwargs Dictionary, args - arguments
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.title(self, "mosh_GUI")
#tk.Tk.iconbitmap(self, default="C:\TuhhSq.ico")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
menubar = tk.Menu(container)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="New Experiment", command= lambda: popupmsg("that is not defined yet"))
filemenu.add_separator()
filemenu.add_command(label="Run From a File", command= quit)
filemenu.add_separator()
filemenu.add_command(label="Exit", command= quit)
menubar.add_cascade(label="File", menu=filemenu)
tk.Tk.config(self,menu=menubar)
self.frames = {} #dic
for F in (Startpage,):#, Page1, Page2, Page3):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(Startpage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class Startpage(tk.Frame) :
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
###Button Plot1
button1 = ttk.Button(self, text="Plot1",
command= lambda: controller.show_frame(Page1) )
button1.grid(row=0, column=0)
###Button Plot2
button2 = ttk.Button(self, text="Plot2",
command= lambda: controller.show_frame(Page1) )
button2.grid(row=0, column=1)
###Button Plot3
button3 = ttk.Button(self, text="Plot3",
command= lambda: controller.show_frame(Page1) )
button3.grid(row=0, column=2)
###Button Plot4
button4 = ttk.Button(self, text="Plot4",
command= lambda: controller.show_frame(Page1) )
button4.grid(row=0, column=3)
###Matplotlib
f = Figure(figsize=(5, 4), dpi=100)
a = f.add_subplot(111)
t = arange(0.0, 3.0, 0.01)
s = sin(2*pi*t)
a.plot(t, s)
fr = tk.Frame(self)
fr.grid(row=1, column=0, columnspan=4)
canvas = FigureCanvasTkAgg(f, master=fr)
canvas.show()
canvas.get_tk_widget().pack()
toolbar = NavigationToolbar2TkAgg(canvas, fr)
toolbar.update()
canvas._tkcanvas.pack()
###Entry
textbox1 = tk.Entry(self, width= 75)
textbox1.grid(row=2, column=0, columnspan=4)
textbox1.insert('end', "Hello World! --- Hello Tkinter! --- Hello Matplotlib!")
app = moshGUI()
app.mainloop()
什么是canava绘图?我指的是Startpage类画布中的canava小部件。get_tk_小部件()您需要修复问题的格式。有些代码没有正确的标记。为什么您会说“之后,我无法使用grid()添加任何内容?”?为什么不能添加任何内容?如果添加,会发生什么情况?这可能与注释掉的代码有关,即您创建一个条目,但不给它一个父项?@BryanOakley这是我的main.py请看一看
frame = tk.Frame(self)
frame.grid(row=1, column=0, columnspan=4)
canvas = FigureCanvasTkAgg(f, master=frame)
canvas.show()
canvas.get_tk_widget().pack()
toolbar = NavigationToolbar2TkAgg(canvas, frame)
toolbar.update()
canvas._tkcanvas.pack()
import matplotlib
matplotlib.use('TkAgg')
import tkinter as tk
from tkinter import ttk
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
# implement the default mpl key bindings
#from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
class moshGUI(tk.Tk):
def __init__(self, *args, **kwargs): #kwargs Dictionary, args - arguments
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.title(self, "mosh_GUI")
#tk.Tk.iconbitmap(self, default="C:\TuhhSq.ico")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
menubar = tk.Menu(container)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="New Experiment", command= lambda: popupmsg("that is not defined yet"))
filemenu.add_separator()
filemenu.add_command(label="Run From a File", command= quit)
filemenu.add_separator()
filemenu.add_command(label="Exit", command= quit)
menubar.add_cascade(label="File", menu=filemenu)
tk.Tk.config(self,menu=menubar)
self.frames = {} #dic
for F in (Startpage,):#, Page1, Page2, Page3):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(Startpage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class Startpage(tk.Frame) :
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
###Button Plot1
button1 = ttk.Button(self, text="Plot1",
command= lambda: controller.show_frame(Page1) )
button1.grid(row=0, column=0)
###Button Plot2
button2 = ttk.Button(self, text="Plot2",
command= lambda: controller.show_frame(Page1) )
button2.grid(row=0, column=1)
###Button Plot3
button3 = ttk.Button(self, text="Plot3",
command= lambda: controller.show_frame(Page1) )
button3.grid(row=0, column=2)
###Button Plot4
button4 = ttk.Button(self, text="Plot4",
command= lambda: controller.show_frame(Page1) )
button4.grid(row=0, column=3)
###Matplotlib
f = Figure(figsize=(5, 4), dpi=100)
a = f.add_subplot(111)
t = arange(0.0, 3.0, 0.01)
s = sin(2*pi*t)
a.plot(t, s)
fr = tk.Frame(self)
fr.grid(row=1, column=0, columnspan=4)
canvas = FigureCanvasTkAgg(f, master=fr)
canvas.show()
canvas.get_tk_widget().pack()
toolbar = NavigationToolbar2TkAgg(canvas, fr)
toolbar.update()
canvas._tkcanvas.pack()
###Entry
textbox1 = tk.Entry(self, width= 75)
textbox1.grid(row=2, column=0, columnspan=4)
textbox1.insert('end', "Hello World! --- Hello Tkinter! --- Hello Matplotlib!")
app = moshGUI()
app.mainloop()