使用Python和Tkinter创建温度程序

时间:2012-11-08 20:23:07

标签: python user-interface button tkinter output

我正在编写一个年度温度的小型Python / Tkinter程序。

我几乎可以将所有内容都作为文本程序工作,但我想将它实现到GUI中。

该程序打开一个csv文件,将其读入列表,计算出平均值,以及min&最大温度。然后,在关闭时,应用程序会将摘要保存到新的文本文件中。

我想要默认的启动屏幕来显示所有年份。单击一个按钮时,它只显示该年份的数据。

这就是我想要的样子:

enter image description here

非常简单的布局,只有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)

我不确定如何处理其他元素,例如标题和表格。

一旦我有了结构/框架,我想我可以填充字段,我可能会这样学习得更好。

3 个答案:

答案 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变量中,然后将这些信息传递给更新标签的更新功能。请注意,当您将某些内容重绘到屏幕时,它不会擦除所有内容并从头开始,因此在重绘时,不要重绘所有按钮和标题,只需重新绘制所有标签。这将节省您的代码行,并使其稍微优化。