当我使用Notebook和Frame Widget时,重量不能正常工作

问题描述 投票:0回答:1

下面是代码。这里Page2是UI的第二个选项卡(检查UI图像)在第二个选项卡中,我创建了框架并添加了标签和条目框。

import tkinter as tk

from dicttoxml import dicttoxml
import xlrd


import GetValueFromExcel
from AppalyingXSLT import GenerateConfig
#import CreateXMLfromDict
from GetValueFromExcel import ExcelValue
from array import array
from tkinter import *
from tkinter import ttk, Button
from tkinter import *

root = Tk()
CheckBoxSelection=[]
NameOfVariable=[]
KeyName=[]
SelectedCheckbox=[]
dict={}
frame_main = tk.Frame(root)
frame_main.grid(sticky='news')
canvas=tk.Canvas()

class UICreation():

    def __init__(self):
        print ("I m in __init__")
        self.nb=ttk.Notebook(frame_main)
        self.page1=ttk.Frame(self.nb)
        self.page2=ttk.Frame(self.nb)

    def tabcreation(self):
        print ("I M in Tab Creation")
        self.nb.add(self.page1,text="Select")
        canvas = tk.Canvas(self.page1)
        canvas.grid(row=0, column=0, sticky="news")
        vsb = tk.Scrollbar(self.page1, orient="vertical", command=canvas.yview)
        vsb.grid(row=0, column=1, sticky='ns')
        canvas.configure(yscrollcommand=vsb.set)
        canvas.config(scrollregion=canvas.bbox("all"))
        f = tk.Frame(canvas)
        canvas.create_window((0, 0), window=f, anchor="n")
        self.nb.grid(sticky=NW)
        print ("I M in checkBox")
        ListNumber=len(List_key)
        print (ListNumber)
        for value in range(0,ListNumber, 1):
             NameOfVariable= "checkBox" + str(value)
             CheckBoxSelection.append("var"+str(value))
             CheckBoxSelection[value]=IntVar()
             NameOfVariable = Checkbutton(f, text=str(List_key[value]),variable=CheckBoxSelection[value])
             Checkbutton()
             NameOfVariable.grid(sticky=NW)
             NameOfVariable.cget("text")
             KeyName.append(NameOfVariable.cget("text"))
        canvas.update()
        canvas.config(scrollregion=canvas.bbox("all"))

    def addNew(self):
        self.nb.add(self.page2,text="Add")
        self.nb.grid_columnconfigure(0,weight=1)
        page2frame=Frame(self.page2)
        page2frame.grid(row=0, column=0, sticky='WE', padx=5, pady=5, columnspan=3)
        page2frame.grid_columnconfigure(1, weight=1)
        lblentry = Label(page2frame, text="Entry Box:")
        lblentry.grid(row=0, column=0, sticky='W')
        entrybx = Entry(page2frame)
        entrybx.grid(row=0, column=0, sticky=E+W, columnspan=10)
        #codeName=tk.Label(page2frame,text="Name").grid(row=1,rowspan=2,pady=(10,10),sticky="NW")


if __name__ == '__main__':
    ui = UICreation()
    ui.tabcreation()
    ui.addNew()

UI Image

在上面的图片中,从上面的代码我只得到一些列的输入框(如“红色”部分所述),即使我试图扩展。

请让我知道,如何扩展它,就像我需要的那样,我已经在“绿箱”中显示

python python-3.x tkinter
1个回答
1
投票

更新:

从您更新的问题我可以看到您需要在第2页的第1列中加权。

self.page2.columnconfigure(0, weight=1)

更换:

class UICreation():

    def __init__(self):
        print ("I m in __init__")
        self.nb=ttk.Notebook(frame_main)
        self.page1=ttk.Frame(self.nb)
        self.page2=ttk.Frame(self.nb)

有了这个:

class UICreation():

    def __init__(self):
        print ("I m in __init__")
        self.nb=ttk.Notebook(frame_main)
        self.page1=ttk.Frame(self.nb)
        self.page2=ttk.Frame(self.nb)
        self.page2.columnconfigure(0, weight=1)

我已更新您的代码以反映更好地遵循PEP8的更清晰的示例。

如果您有任何疑问,请与我们联系:

import tkinter as tk
import tkinter.ttk as ttk


class UICreation():

    def __init__(self, master):
        self.nb=ttk.Notebook(master)
        self.page1=ttk.Frame(self.nb)
        self.page2=ttk.Frame(self.nb)
        self.page2.columnconfigure(0, weight=1)
        self.check_box_election=[]
        self.name_of_variable=[]
        self.key_name=[]
        self.selected_checkbox=[]
        self.dict={}
        self.frame_main = tk.Frame(root)
        self.frame_main.grid(sticky='news')
        self.canvas=tk.Canvas()
        self.list_key = ["1", "2"]

    def tabcreation(self):
        self.nb.add(self.page1,text="Select")
        canvas = tk.Canvas(self.page1)
        canvas.grid(row=0, column=0, sticky="news")
        vsb = tk.Scrollbar(self.page1, orient="vertical", command=canvas.yview)
        vsb.grid(row=0, column=1, sticky='ns')
        canvas.configure(yscrollcommand=vsb.set)
        canvas.config(scrollregion=canvas.bbox("all"))
        f = tk.Frame(canvas)
        canvas.create_window((0, 0), window=f, anchor="n")
        self.nb.grid(sticky="nw")

        list_number = len(self.list_key)
        for value in range(0,list_number, 1):
            name_of_variable= "checkBox" + str(value)
            self.check_box_election.append("var"+str(value))
            self.check_box_election[value] = tk.IntVar()
            name_of_variable = tk.Checkbutton(f, text=str(self.list_key[value]),variable=self.check_box_election[value])
            name_of_variable.grid(sticky="nw")
            name_of_variable.cget("text")
            self.key_name.append(name_of_variable.cget("text"))
        canvas.update()
        canvas.config(scrollregion=canvas.bbox("all"))

    def add_new(self):
        self.nb.add(self.page2,text="Add")
        page2frame = tk.Frame(self.page2)
        page2frame.grid(row=0, column=0, sticky='ew', padx=5, pady=5, columnspan=3)
        page2frame.grid_columnconfigure(1, weight=1)
        lblentry = tk.Label(page2frame, text="Entry Box:")
        lblentry.grid(row=0, column=0, sticky='w')
        entrybx = tk.Entry(page2frame)
        entrybx.grid(row=0, column=0, sticky="ew", columnspan=10)

if __name__ == '__main__':
    root = tk.Tk()
    ui = UICreation(root)
    ui.tabcreation()
    ui.add_new()
    root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.