岁月蹉跎,三周没有进展。今天终于搭建了一个初步的框架,各种百度找资料。由于参考的太多,这里就不在一一列出来了。总结起来有如下几点:
1)对于Label,可以通过字典的方式,采用for循环比较容易多个Label,主要是不需要对其进行任何操作,因此,只需要在相应的位置产生具有一定text的Label即可。
对于Label的字体,可以采用Style模式,该模式可以通过下面的方式来配置。而且对于不同的Widget,ttk中要增加T,如Button前增加TButton。
lab_style = ttk.Style()
lab_style.configure('TLabel', font = font_size)
par_var = [('C1', 0),
('R2', 1),
('C2', 2),
('R3', 3),
('C3', 4),
('icp', 5),
('Kvco', 6),
('div_N', 7)]
for name, num in par_var:
ttk.Label(self.par_in, text = name, anchor = 'center', font = font_size,
width = 6).grid(column = 0, row = num, pady = 4)
2)对于Entry采用for循环的方法没有找到,只能采取比较笨的方法一个一个来生成。确实笨死了。
self.C1 = tk.StringVar()
ttk.Entry(self.par_in, textvariable = self.C1, width = 16).grid(column = 1, row = 0, padx = 2)
self.R2 = tk.StringVar()
ttk.Entry(self.par_in, textvariable = self.R2, width = 16).grid(column = 1, row = 1, padx = 2)
self.C2 = tk.StringVar()
ttk.Entry(self.par_in, textvariable = self.C2, width = 16).grid(column = 1, row = 2, padx = 2)
self.R3 = tk.StringVar()
ttk.Entry(self.par_in, textvariable = self.R3, width = 16).grid(column = 1, row = 3, padx = 2)
self.C3 = tk.StringVar()
ttk.Entry(self.par_in, textvariable = self.C3, width = 16).grid(column = 1, row = 4, padx = 2)
self.icp = tk.StringVar()
ttk.Entry(self.par_in, textvariable = self.icp, width = 16).grid(column = 1, row = 5, padx = 2)
self.Kvco = tk.StringVar()
ttk.Entry(self.par_in, textvariable = self.Kvco, width = 16).grid(column = 1, row = 6, padx = 2)
self.div_N = tk.StringVar()
ttk.Entry(self.par_in, textvariable = self.div_N, width = 16).grid(column = 1, row = 7, padx = 2)
3)LabelFrame的产生过程主要是参数设置,也可以采用TLabelframe的方法,但组标题没办法修改,后来找到是必须用Label来产生。上面两点都是增加在LabelFrame中的组件。
label = ttk.Label(text = '参数输入', font = ('黑体', font_size))
# 定义输入参数
self.par_in = ttk.LabelFrame(self, labelanchor = 'n', labelwidget = label)
self.par_in.grid(column = 0, row = 0, columnspan = 2, padx = 10, pady = 10)
4)一个比较奇怪的问题是,由于设置了一个变量font_size,结果在Label的font设置就出现异常。主要表现为在Label中设置font参数,无论设置的值是多少,都不影响实际字体大小。但如果把该参数去掉,则font会变成原来的默认值,很小。具体原因没有找到。尝试了多次,结果还是异常。
5)在Lable中增加一个图片。下面代码中开始的时候,第四行定义时直接使用image变量,结果图片总是不显示,增加self.image后才可以显示。
label = ttk.Label(text = 'CPPLL示意图', font = ('黑体', 14))
self.cppll_image = ttk.LabelFrame(self, labelanchor = 'n', labelwidget = label)
self.cppll_image.grid(column = 2, row = 0, padx = 10, pady = 10)
self.image = tk.PhotoImage(file = 'CPPLL_small.png')
photo_lab = ttk.Label(self.cppll_image, image = self.image)
photo_lab.pack()
最终结果如下图所示。