Python 为什么我不能在canava绘图之后使用grid()添加任何内容?我怎样才能使情节扩大呢

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

您好,我正在使用Tkinter为我的应用程序设计GUI。我使用grid()将对象放置在起始页(4个按钮、绘图、绘图工具栏和文本输入) 在我为绘图添加canava之前,一切都正常,之后我无法使用grid()添加任何内容,第二个问题:我想知道如何使用相同的方法grid()在X轴上展开绘图


要添加
条目
您必须为小部件设置
父项
——在您的代码中,它将是
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()