Python 当我使用笔记本和框架小部件时,重量并没有像预期的那样工作

Python 当我使用笔记本和框架小部件时,重量并没有像预期的那样工作,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,下面是代码。这里第2页是UI的第二个选项卡(检查UI图像) 在第二个选项卡中,我创建框架并添加标签和输入框 import tkinter as tk from dicttoxml import dicttoxml import xlrd import GetValueFromExcel from AppalyingXSLT import GenerateConfig #import CreateXMLfromDict from GetValueFromExcel import ExcelV

下面是代码。这里第2页是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()

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

请让我知道如何根据需要扩展它,我已在“绿框”中显示更新:

从您更新的问题中,我可以看出您需要在第2页的第1栏中添加权重

self.page2.columnconfigure(0,权重=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()

您的示例代码是不可测试的。请提供一个我们可以复制粘贴并运行的示例。其次,你的标题说权重不起作用,但你的代码没有显示权重的任何用途。@Mike SMT
page2frame.grid\u columnconfigure(0,权重=1)
我尝试了
page2frame.grid\u columnconfigure(0,权重=2)
。我有很多代码在其他选项卡上。我已经将上面的代码作为一个函数,并通过ObjectUsing从主函数调用它。您仍然应该提供一个。也就是说,看起来您在错误的框架/窗口上提供了重量。重量不应该在
page2frame
中,而应该在
self.page2
@Mike SMT中,但是我在page2中的框架是正确的。还是不行吗?我们能给这个标签加重量吗?对不起,让我来记录一下。您需要在page2第0列和page2frame第1列中添加权重。如您所述进行了更改,完全添加到代码上方。但它仍然不起作用。我正在使用Pycharm。有没有什么东西我还没找到呢。。我能知道我的代码有什么问题吗。。我看到了变化,但为什么会发生变化呢?主要问题是你在哪里配重。您需要第2页第0列和第2页第1列的权重。清理主要是风格和进口的东西。例如,您为tkinter导入了很多way 2。几乎所有操作都需要
import tkinter as tk
import tkinter.ttk as ttk
。然后,您只需使用这些前缀调用所需的每个小部件。示例:
tk.Label()
ttk.Button()
等等。太棒了!!谢谢