StringVar不起作用

1 投票
2 回答
766 浏览
提问于 2025-04-18 17:18

我一直在找跟这个代码问题相关的问答,但没找到什么有用的信息。

我想,也许如果我把我的困扰发在这里,会有人能帮我。

这个类的问题是,StringVar类型的self.text_incl在屏幕上没有显示出来。我加了一个打印语句来测试这个对象是否创建成功,结果是成功的。不过,当我在incl对象中调用StringVar时,它还是没有显示在屏幕上。

我会给你们看一个tkinter窗口的截图。

截图

class Data_window:

    def __init__(self, index):

        import os
        import sys

        import get_elements
        elements = get_elements.Get_elements(sys.argv[1], index)

        import Tkinter as tk
        self.data_root = tk.Tk()
        self.data_root.geometry("300x200")
        self.data_root.title("Satellite data")

        self.widgets()

        self.data_root.mainloop()

    def widgets(self):

        satellite_data = tk.LabelFrame(self.data_root, text="Satellite")
        satellite_data.grid(column = 0, row = 0, columnspan = 1, rowspan = 1)

        label_name = tk.Label(satellite_data, text="Name")
        label_name.grid(column = 0, row = 0, columnspan = 1, rowspan = 1)

        file_name = tk.Label(satellite_data, text="File")
        file_name.grid(column = 0, row = 1, columnspan = 1, rowspan = 1)

        orbital_data = tk.LabelFrame(self.data_root, text="Orbital elements")
        orbital_data.grid(column = 0, row = 1, columnspan = 1, rowspan = 1)

        label_incl = tk.Label(orbital_data, text="Inclination")
        label_incl.grid(column = 0, row = 0, columnspan = 1, rowspan = 1)

        self.text_incl = tk.StringVar()

        self.text_incl.set("test")

        print self.text_incl.get()

        incl = tk.Label(orbital_data, textvariable = self.text_incl)

        incl.grid(column = 1, row = 0, columnspan = 1, rowspan = 1)

2 个回答

0

在我的测试中,你的标签显示在了“Inclination”后面。我修改了这一行

incl.grid(column = 0, row = 1, columnspan = 1, rowspan = 1)

让它直接显示在“Inclination”下面。所以总结一下,你的标签是存在的,只是你看不见而已。

补充:这是我电脑上的截图:

在这里输入图片描述

0

这个问题可能有很多原因造成,可能不是单一的因素,而是几个因素的组合。我无法重现这个问题,但我猜测你的选项组合可能导致小部件无法长到合适的大小,所以框架里的部分内容被截断了。

比如说,你没有给小部件添加“sticky”选项,这样它们就无法扩展去填满框架里分配给它们的空间。你在标签框(labelframes)上也没有使用sticky选项,所以它们也无法扩展去填满它们在父框架中的区域。结果就是所有东西都被限制得尽可能小。

另外,你在主窗口的行和列上没有设置权重,这样它们也不会扩展或收缩。任何额外的空间都被用在了你的标签框外面。

一般来说,当使用网格布局(grid)时,你几乎总是需要使用sticky选项,并且至少要给一列和一行设置一个非零的权重。

撰写回答