Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改帧时Tkinter中的额外空间_Python_Tkinter - Fatal编程技术网

Python 更改帧时Tkinter中的额外空间

Python 更改帧时Tkinter中的额外空间,python,tkinter,Python,Tkinter,我正在尝试为python制作GUI,其中框架在单击按钮时可以替换,我尝试了遵循许多教程来完成它,但我可以做到,所以在这里和那里混合了一些东西之后,我尝试了一些东西,似乎可以工作,但每当框架更改时,底部会添加额外的空间,我什么都试过了,但都做不成 这是我的密码: from tkinter import * import tkinter as tk class Application(Frame): def __init__(self, master=None): Fram

我正在尝试为python制作GUI,其中框架在单击按钮时可以替换,我尝试了遵循许多教程来完成它,但我可以做到,所以在这里和那里混合了一些东西之后,我尝试了一些东西,似乎可以工作,但每当框架更改时,底部会添加额外的空间,我什么都试过了,但都做不成

这是我的密码:

from tkinter import *
import tkinter as tk

class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        self.master.title("Main Window")

        for r in range(6):
            self.master.rowconfigure(r, weight=1)    
        for c in range(5):
            self.master.columnconfigure(c, weight=1)
            Button(master, text="Button {0}".format(c)).grid(row=6,column=c,sticky=E+W)

        Frame1 = Frame(master, bg="#000000")
        Frame1.grid(row = 0, column = 0, rowspan = 10, columnspan = 1, sticky = W+E+N+S) 

        Button(Frame1, text='Email \n Checker', bg='#FFFFFF', font=('arial', 22, 'normal'), command=btnClickFunction).place(x=10, y=55)

        Button(Frame1, text='Auto Email\nSender', bg='#FFFFFF', font=('arial', 20, 'normal'), command=btnClickFunction).place(x=10, y=215)

        Button(Frame1, text='Auto DM\n Sender', bg='#FFFFFF', font=('arial', 22, 'normal'),
                 command=lambda: self.switch_frame(StartPage)).place(x=17, y=366)

        Frame3 = Frame(master, bg="green")
        Frame3.grid(row = 0, column = 1, rowspan = 60, columnspan = 30, sticky = W+E+N+S)
    
    def switch_frame(self, frame_class):
        new_frame = frame_class()
        new_frame.tkraise()

def btnClickFunction():
    print('clicked')

class StartPage(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        # self.master.title("Main Window")

        Frame1 = Frame(master, bg="#000000")
        Frame1.grid(row = 0, column = 0, rowspan = 10, columnspan = 1, sticky = W+E+N+S) 

        Button(root, text='Email', bg='#FFFFFF', font=('arial', 22, 'normal'), command=btnClickFunction).place(x=10, y=55)

        Button(Frame1, text='Auto Email\nSender', bg='#FFFFFF', font=('arial', 20, 'normal'), command=btnClickFunction).place(x=10, y=215)

        Button(root, text='Auto DM\n Sender', bg='#FFFFFF', font=('arial', 22, 'normal'),
                 command=lambda: self.switch_frame(Application)).place(x=17, y=366)

        Frame3 = Frame(master, bg="green")
        Frame3.grid(row = 0, column = 1, rowspan = 60, columnspan = 30, sticky = W+E+N+S)
        # Frame3.grid_rowconfigure(1, weight=1, uniform="x")


    def switch_frame(self, frame_class):
        new_frame = frame_class()
        # frame = new_frame
        new_frame.tkraise()
        

root = Tk()
root.geometry("871x560")
app = Application(master=root)
app.mainloop()
每当我单击“自动DM发件人”时,它会将按钮“电子邮件检查器”更改为“电子邮件”,但会在窗口底部添加空格


我真正想做的是当我点击任何一个按钮时,绿色部分的内容应该分别改变。我可以开发绿色部分中要显示的内容,但我无法开发如何在单击按钮时更改绿色部分,如果有人可以帮助演示单击按钮如何更改绿色部分,这将非常有用。谢谢。

我们从头开始怎么样?有很多错误和混乱。重新开始会更容易。你需要定制我的例子来适应你的应用程序,但是它为你提供了一个建立的工作基础。

最大问题清单:

  • 您使用的网格(行/列)配置()不正确
  • 你基本上是在两次建造同一个东西
  • 是艾莉希丝。您可以使用Tk作为主框架
  • 示例基础

    from tkinter import *
    
    class Application(Tk):
        def __init__(self, *args, **kwargs):
            Tk.__init__(self,  *args, **kwargs)
            
            #use this as the master for your buttons
            sidebar = Frame(self, bg="#0000FF")
            sidebar.grid(row=0, column=0, sticky="nswe")
            
            #button example        
            btn  = Button(sidebar, text='switch', font=('arial', 20, 'normal'), command=self.switch)
            btn.place(x=10, y=55)
            
            #use this frame as the master for main content
            self.main1 = Frame(self, bg="#00FF00")
            self.main1.grid(row=0, column=1, sticky="nswe")
            
            
            #use this frame as master for alternate content
            #note that this is "waiting" to be added to the grid
            self.main2 = Frame(self, bg="#FF0000")
            
    
            #config layout ~ notice this is AFTER everything has been added to the grid
            #also note that the first argument is the element to configure, not a number
            self.grid_columnconfigure(sidebar, weight=1)
            self.grid_rowconfigure(sidebar, weight=1)
            self.grid_columnconfigure(self.main1, weight=6)
            self.grid_rowconfigure(self.main1, weight=1)
            
            #frames to toggle between
            self.frames = [self.main1, self.main2]
        
        #this is just an example of removing and adding element to/from the grid
        #you will need to change this to suit your needs by applying ...
        #grid_remove() to the current main frame and grid() to the new main frame     
        def switch(self, **kwargs):
            self.frames[0].grid_remove()
            self.frames.append(self.frames.pop(0)) #cheating and dirty rotation
            self.frames[0].grid(row=0, column=1, sticky="nswe")
    
    if __name__ == "__main__":
        app = Application()
        app.geometry("871x560")
        app.title('Frame Switch Example')
        app.mainloop()