2

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

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

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

我希望默认启动屏幕显示所有年份。单击按钮时,它只显示当年的数据。

这是我想要的样子:

在此处输入图像描述

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

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

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

4

3 回答 3

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

祝你好运 :)

如果您需要更多帮助,请在评论中提问 :)

于 2012-11-09T12:13:30.347 回答
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)
于 2012-11-08T21:55:54.107 回答
0

您可能要考虑的一个选项是使用该函数而不是使用 tkinter 的.pack()函数.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变量中,然后将它们传递给更新标签的更新函数。请注意,当您在屏幕上重绘某些内容时,它不会擦除所有内容并从头开始,因此在重绘时,不要重绘所有按钮和标题,只需重绘所有标签即可。这将节省您的代码行并使其更加优化。

于 2012-11-09T22:21:01.453 回答