簡體   English   中英

Tkinter GUI Python 中的調整按鈕大小

[英]Resize button in Tkinter GUI Python

我用 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()

1) 如何移動窗口頂部的按鈕?

2)為什么,如果我調整窗口大小,“忘記”按鈕會變得比其他按鈕大? 如何使所有按鈕的大小相同?

因為您只調用了columnconfigure(0, weight=1) ,因此在調整窗口大小時,只會調整Forget按鈕的大小。

要將按鈕移動到窗口頂部,您需要將按鈕重新排列為row=0並將Treeview重新排列為row=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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM