我正在编写一个年度温度的小型Python / Tkinter程序。
我几乎可以将所有内容都作为文本程序工作,但我想将它实现到GUI中。
该程序打开一个csv
文件,将其读入列表,计算出平均值,以及min&最大温度。然后,在关闭时,应用程序会将摘要保存到新的文本文件中。
我想要默认的启动屏幕来显示所有年份。单击一个按钮时,它只显示该年份的数据。
这就是我想要的样子:
非常简单的布局,只有5个按钮和每个的输出。
我可以用以下内容组成顶部的按钮:
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.hi_there = Button(frame, text="All Years", command=self.All)
self.hi_there.pack(side=LEFT)
self.hi_there = Button(frame, text="2011", command=self.Y1)
self.hi_there.pack(side=LEFT)
self.hi_there = Button(frame, text="2012", command=self.Y2)
self.hi_there.pack(side=LEFT)
self.hi_there = Button(frame, text="2013", command=self.Y3)
self.hi_there.pack(side=LEFT)
self.hi_there = Button(frame, text="Save & Exit", command=self.Exit)
self.hi_there.pack(side=LEFT)
我不确定如何处理其他元素,例如标题和表格。
一旦我有了结构/框架,我想我可以填充字段,我可能会这样学习得更好。
答案 0 :(得分:1)
这是我最喜欢的Tkinter资源:http://effbot.org/tkinterbook/
标题可以是标签:http://effbot.org/tkinterbook/label.htm
w = Label(master, text="Hello, world!")
w.grid(column=1,row=1)
对于其他所有内容,请创建一个条目小部件:
textBox = Text(self, height=1,width=1)
textBox.grid(sticky=E,column=1,row=1)
然后插入数据:
self.textBox.insert('end',yourText)
答案 1 :(得分:1)
您好,我想我明白您要完成的任务,我建议使用ttk.Treeview制作表格,这是一个非常有用的工具,虽然它可能看起来很难工作
这是一个帮助您了解我的意思的小例子
from Tkinter import *
import ttk
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.hi_there = Button(frame, text="All Years", command=self.All)
self.hi_there.pack(side=LEFT)
self.hi_there = Button(frame, text="2011", command=self.Y1)
self.hi_there.pack(side=LEFT)
self.hi_there = Button(frame, text="2012", command=self.Y2)
self.hi_there.pack(side=LEFT)
self.hi_there = Button(frame, text="2013", command=self.Y3)
self.hi_there.pack(side=LEFT)
self.hi_there = Button(frame, text="Save & Exit", command=self.Exit)
self.hi_there.pack(side=LEFT)
frame2 = Frame(master)
frame2.pack()
treedata = [('column 1', 'column 2'), ('column 1', 'column 2')]
column_names = ("heading1", "heading2")
tree = ttk.Treeview(frame2, columns = column_names)
for x in treedata:
tree.insert('', 'end', values =x)
for col in column_names:
tree.heading(col, text = col.Title())
tree.pack()
希望这有助于这方面没有很多文档,但谷歌会提供帮助,这是一个非常有用的链接:http://www.tkdocs.com/tutorial/tree.html
祝你好运:)如果您需要更多帮助,请在评论中提问:)
答案 2 :(得分:0)
您可能需要考虑的选项是使用.pack()
函数,而不是使用tkinter的.grid()
函数。这使您可以更加动态地按照自己的方式排列对象,并且非常适合您正在做的事情(创建网格)。
执行此操作后,您可以获取csv文件信息并将文本另存为变量(假设为csvText
)。然后,使用以下命令将变量打印为标签:
dataText = Tkinter.Label(root,text=csvText)
dataText.grid(row=2,column=0)
并为每条信息执行此操作。除了使用columnspan
属性外,顶部的标题将以相同的方式打包到网格中:
title = Tkinter.Label(root,text="TITLE")
title.grid(row=1,column=0,columnspan=4)
您的按钮将是相同的,除了使用.pack(side=LEFT)
之外,您可以执行以下操作来打包:
self.hi_there = Button(frame, text="All Years", command=self.All)
self.hi_there.grid(row=0,column=0)
self.hi_there = Button(frame, text="2011", command=self.Y1)
self.hi_there.grid(row=0,column=1)
self.hi_there = Button(frame, text="2012", command=self.Y2)
self.hi_there.grid(row=0,column=2)
self.hi_there = Button(frame, text="2013", command=self.Y3)
self.hi_there.grid(row=0,column=3)
self.hi_there = Button(frame, text="Save & Exit", command=self.Exit)
self.hi_there.grid(row=0,column=4)
所有按钮功能必须是找到新的csv信息,将它们存储在相同的csvText
变量中,然后将这些信息传递给更新标签的更新功能。请注意,当您将某些内容重绘到屏幕时,它不会擦除所有内容并从头开始,因此在重绘时,不要重绘所有按钮和标题,只需重新绘制所有标签。这将节省您的代码行,并使其稍微优化。