Tkinter GUI Python中的调整按钮大小

Tkinter GUI Python中的调整按钮大小,python,tkinter,Python,Tkinter,我用Tkinter创建了一个简单的GUI应用程序 关于此代码,我有两个问题: import tkinter as tk from tkinter import ttk, Grid, Frame, N, S, W, E, StringVar, Label, Entry, RAISED, Button, Checkbutton, Scrollbar class mainApp(Frame): def __init__(self, parent): Frame.__init_

我用Tkinter创建了一个简单的GUI应用程序

关于此代码,我有两个问题:

import tkinter as tk
from tkinter import ttk, Grid, Frame, N, S, W, E, StringVar, Label, Entry, RAISED, Button, Checkbutton, Scrollbar

class mainApp(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.scan_button = Button(self.parent, text="Scan", command=self.scan_wifi)
        self.forget_button = Button(self.parent, text="Forget", command=self.forget_wifi)
        self.reboot_button = Button(self.parent, text="Reboot", command=self.reboot)
        frame=Frame(self.parent)
        Grid.rowconfigure(self.parent, 0, weight=1)
        Grid.columnconfigure(self.parent, 0, weight=1)
        frame.grid(row=0, column=0, sticky=N+S+E+W)
        grid=Frame(self.parent)
        grid.grid(sticky=N+S+E+W, column=0, row=7, columnspan=2)
        Grid.rowconfigure(self.parent, 7, weight=1)
        Grid.columnconfigure(self.parent, 0, weight=1)

        headings=('Name', 'Address', 'Quality', 'Channel', 'Signal Level', 'Encryption')
        row=[]
        rows=[]

        self.table = ttk.Treeview(show="headings", selectmode="browse")
        self.table["columns"]=headings
        self.table["displaycolumns"]=headings

        for head in headings:
            self.table.heading(head, text=head, anchor=tk.CENTER)
            self.table.column(head, width=30, anchor=tk.CENTER)

        self.scrolltable = tk.Scrollbar(command=self.table.yview)
        self.table.configure(yscrollcommand=self.scrolltable.set)
        self.scrolltable.grid(row=1, column=100, sticky=N+S)

        for row in rows:
            self.table.insert('', tk.END, values=tuple(row))

        self.table.bind('<ButtonRelease-1>', self.OnRelease)
        self.table.grid(row=0, rowspan=14, columnspan = 21, sticky=N+S+E+W)
        self.scan_button.grid(row=15, column = 1, columnspan = 1,   sticky=N+S+E+W)
        self.forget_button.grid(row=15, column = 0, columnspan = 1 , sticky=N+S+E+W)
        self.reboot_button.grid(row=15, column = 3, columnspan = 1 , sticky=N+S+E+W)

    def OnRelease(self, event):
        pass

    def scan_wifi(self):
        pass

    def forget_wifi(self):
        pass

    def reboot(self):
        pass

root=tk.Tk()

app = mainApp(root)
root.mainloop()
将tkinter作为tk导入
从tkinter导入ttk、网格、帧、N、S、W、E、StringVar、标签、条目、凸起、按钮、检查按钮、滚动条
类mainApp(框架):
定义初始化(自身,父级):
帧。\uuuu初始化(自,父)
self.parent=parent
self.scan\u按钮=按钮(self.parent,text=“scan”,command=self.scan\u wifi)
self.forget\u按钮=按钮(self.parent,text=“forget”,command=self.forget\u wifi)
self.reboot\u button=按钮(self.parent,text=“reboot”,command=self.reboot)
frame=frame(self.parent)
Grid.rowconfigure(self.parent,0,weight=1)
Grid.columnconfigure(self.parent,0,weight=1)
frame.grid(行=0,列=0,粘性=N+S+E+W)
网格=帧(self.parent)
grid.grid(粘性=N+S+E+W,列=0,行=7,列跨度=2)
Grid.rowconfigure(self.parent,7,weight=1)
Grid.columnconfigure(self.parent,0,weight=1)
标题=(‘名称’、‘地址’、‘质量’、‘通道’、‘信号电平’、‘加密’)
行=[]
行=[]
self.table=ttk.Treeview(show=“headers”,selectmode=“browse”)
self.table[“columns”]=标题
self.table[“displaycolumns”]=标题
标题中的标题:
self.table.heading(head,text=head,anchor=tk.CENTER)
self.table.column(头部,宽度=30,锚定=tk.CENTER)
self.scrolltable=tk.Scrollbar(命令=self.table.yview)
self.table.configure(yscrollcommand=self.scrolltable.set)
self.scrolltable.grid(行=1,列=100,粘性=N+S)
对于行中的行:
self.table.insert(“”,tk.END,values=元组(行))
self.table.bind(“”,self.OnRelease)
self.table.grid(行=0,行span=14,列span=21,粘性=N+S+E+W)
self.scan_button.grid(行=15,列=1,列span=1,粘性=N+S+E+W)
self.forget_button.grid(行=15,列=0,列span=1,粘滞=N+S+E+W)
self.reboot_button.grid(行=15,列=3,列span=1,粘性=N+S+E+W)
def OnRelease(自我、事件):
通过
def扫描无线网络(自):
通过
def忘记_wifi(自):
通过
def重新启动(自我):
通过
root=tk.tk()
app=mainApp(根目录)
root.mainloop()
1) 如何移动窗口顶部的按钮


2) 为什么,如果我调整窗口大小,“忘记”按钮会比其他按钮大?如何使所有按钮大小相同?

因为您只调用了
columnconfigure(0,weight=1)
,因此在调整窗口大小时,只有
忘记
按钮才会调整大小

要将按钮移动到窗口顶部,需要将按钮重新排列为
行=0
,将
树视图重新排列为
行=1
。以下是基于您的修改代码:

import tkinter as tk
from tkinter import ttk

class mainApp(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.parent = parent
        # buttons
        self.forget_button = tk.Button(self.parent, text='Forget', command=self.forget_wifi)
        self.scan_button = tk.Button(self.parent, text='Scan', command=self.scan_wifi)
        self.reboot_button = tk.Button(self.parent, text='Reboot', command=self.reboot)

        self.forget_button.grid(row=0, column=0, sticky='nsew')
        self.scan_button.grid(row=0, column=1, sticky='nsew')
        self.reboot_button.grid(row=0, column=2, sticky='nsew')

        # make the 3 buttons same width
        for i in range(3):
          self.parent.columnconfigure(i, weight=1)
        # make the treeview and the scrollbar to fill the remaining space
        self.parent.rowconfigure(1, weight=1)

        # treeview and scrollbar
        frame = tk.Frame(self.parent)
        frame.grid(row=1, column=0, columnspan=3, sticky='nsew')

        headings=('Name', 'Address', 'Quality', 'Channel', 'Signal Level', 'Encryption')
        self.table = ttk.Treeview(frame, show='headings', selectmode='browse')
        self.table['columns'] = headings
        self.table['displaycolumns'] = headings

        for head in headings:
            self.table.heading(head, text=head, anchor=tk.CENTER)
            self.table.column(head, width=30, anchor=tk.CENTER)

        self.scrolltable = tk.Scrollbar(frame, command=self.table.yview)
        self.table.configure(yscrollcommand=self.scrolltable.set)

        self.table.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
        self.scrolltable.pack(side=tk.RIGHT, fill=tk.Y)

        self.table.bind('<ButtonRelease-1>', self.OnRelease)

    def OnRelease(self, event):
        pass

    def scan_wifi(self):
        pass

    def forget_wifi(self):
        pass

    def reboot(self):
        pass

root=tk.Tk()
app = mainApp(root)
root.mainloop()
将tkinter作为tk导入
从tkinter导入ttk
类mainApp(传统框架):
定义初始化(自身,父级):
tk.Frame.\uuuu init\uuuuu(自,父)
self.parent=parent
#钮扣
self.forget_button=tk.button(self.parent,text='forget',command=self.forget_wifi)
self.scan_button=tk.button(self.parent,text='scan',command=self.scan_wifi)
self.reboot\u button=tk.button(self.parent,text='reboot',command=self.reboot)
self.forget_button.grid(行=0,列=0,sticky='nsew')
self.scan_button.grid(行=0,列=1,sticky='nsew')
self.reboot\u button.grid(行=0,列=2,sticky='nsew')
#使3个按钮的宽度相同
对于范围(3)中的i:
self.parent.columnconfigure(i,权重=1)
#使树状视图和滚动条填满剩余的空间
self.parent.rowconfigure(1,权重=1)
#树状视图和滚动条
frame=tk.frame(self.parent)
frame.grid(行=1,列=0,列span=3,sticky='nsew')
标题=(‘名称’、‘地址’、‘质量’、‘通道’、‘信号电平’、‘加密’)
self.table=ttk.Treeview(frame,show='headers',selectmode='browse')
self.table['columns']=标题
self.table['displaycolumns']=标题
标题中的标题:
self.table.heading(head,text=head,anchor=tk.CENTER)
self.table.column(头部,宽度=30,锚定=tk.CENTER)
self.scrolltable=tk.Scrollbar(框架,命令=self.table.yview)
self.table.configure(yscrollcommand=self.scrolltable.set)
self.table.pack(side=tk.LEFT,fill=tk.BOTH,expand=1)
self.scrolltable.pack(side=tk.RIGHT,fill=tk.Y)
self.table.bind(“”,self.OnRelease)
def OnRelease(自我、事件):
通过
def扫描无线网络(自):
通过
def忘记_wifi(自):
通过
def重新启动(自我):
通过
root=tk.tk()
app=mainApp(根目录)
root.mainloop()

对于问题2,这是因为您调用了
Grid.columnconfigure(self.parent,0,weight=1)
。对于问题1,您的意思是要将底部按钮移动到窗口顶部吗?是的,窗口顶部,树状视图上方。