在tkinter中运行一个函数

时间:2014-11-13 22:31:03

标签: python oop tkinter

我创建了一个从列表中读取某些字符串的函数。

应该在用tkinter创建的框架内显示(或者更确切地说)该函数。

我的想法是将函数创建为框架类的方法(或者可以作为标签的方法)并使用新实例调用该方法。结果是,内容显示在控制台中。

到目前为止我的代码:

from Tkinter import *
root = Tk()

a = 1
b = -6
c = -5

def calc_x(y):
    x = 0
    if y == c:
        for i in range(1,len(data)):
            x = x + int(data[i][y])
            t = x/(len(data)-1)
        print str(t)+"%"
    else:
        for i in range(1,len(data)):
            x = x + int(data[i][y])
        print x 

class Fram(Frame):

    def __init__(self,tk,width,height):
        Frame.__init__(self,tk)
        self.config(width=width)
        self.config(height=height)
        self.config(bd=1)
        self.config(relief="solid")

square_frame = Fram(root,500,40).grid(row=0,column=0,padx=3,pady=3)

mainloop()

编辑:

好的,非常感谢你到目前为止。 我添加了“数据”列表以及源URL。

如何使用任一变量(self.a / b / c)调用该函数? 当我创建“Fram”的实例时,它不显示字符串。

from Tkinter import *
from urllib2 import *
import csv

root = Tk()

class Fram(Frame):

def __init__(self,tk,width,height):
    Frame.__init__(self,tk)
    self.config(width=width)
    self.config(height=height)
    self.config(bd=1)
    self.config(relief="solid")
    self.url = "http://data.nottinghamtravelwise.org.uk/parking.csv?noLocation=true?t=635509084580321642"
    self.webpage = urlopen(self.url)
    self.datareader = csv.reader(self.webpage.read().decode('utf-8').splitlines())
    self.data = list(self.datareader)
    self.a = 1
    self.b = -6
    self.c = -5
    self.value = self.calc_x(self.a)
    self.label = Label(self, text=self.value)
    self.label.pack()

def calc_x(self, y):
    x = 0
    if y == self.c:
        for i in range(1,len(data)):
            x = x + int(data[i][y])
            t = x/(len(data)-1)
        return str(t)+'%'
    else:
        for i in range(1,len(data)):
            x = x + int(data[i][y])
        return str(x)

2 个答案:

答案 0 :(得分:0)

我认为你有两个选择,你可以使用Label小部件或Text Widget。 Label Widget对于短字符串更有用,您可以这样调用:

self.label = Label(self, text="TEXT TO BE INSERTED")
self.label.pack()

可以像这样访问文本小部件:

self.text = Text(self, height=30, width=30)
self.text.pack()
self.text.insert(END, "TEXT TO BE INSERTED")

同样通过它的声音,您应该考虑在类中移动函数并使用__init__self.calcx(y)调用它。这样,您的班级就可以访问您需要的所有信息。

编辑(试试这个):

from Tkinter import *
from urllib2 import *
import csv

root = Tk()

class Fram(Frame):

    def __init__(self,tk,width,height):
        Frame.__init__(self,tk)
        self.config(width=width)
        self.config(height=height)
        self.config(bd=1)
        self.config(relief="solid")
        self.url = "http://data.nottinghamtravelwise.org.uk/parking.csv?noLocation=true?t=635509084580321642"
        self.webpage = urlopen(self.url)
        self.datareader = csv.reader(self.webpage.read().decode('utf-8').splitlines())
        self.data = list(self.datareader)
        self.a = 1
        self.b = -6
        self.c = -5
        self.value = self.calc_x(self.a, self.data)
        self.label = Label(self, text=self.value)
        self.label.pack()

    def calc_x(self, y, data):
        x = 0
        if y == self.c:
            for i in range(1,len(data)):
                x = x + int(data[i][y])
                t = x/(len(data)-1)
            return str(t)+'%'
        else:
            for i in range(1,len(data)):
                x = x + int(data[i][y])
            return str(x)

square_frame = Fram(root,500,40).grid(row=0,column=0,padx=3,pady=3)

mainloop()

答案 1 :(得分:0)

好的,经过多次尝试,我找到了一个非常方便的解决方案。

不使用框架,画布项目可以更灵活地放置对象/字符串。

from Tkinter import *
from urllib2 import *
import csv

url = "http://data.nottinghamtravelwise.org.uk/parking.csv?noLocation=true?t=635509084580321642"
webpage = urlopen(url)
datareader = csv.reader(webpage.read().decode('utf-8').splitlines())
data = list(datareader)

class elements(Canvas):

    def __init__(self,tk,shape):
        Canvas.__init__(self,tk)
        self.config(width=600)
        self.method_a()

    def method_a(self):
        self.config(height=20)
        self.config(bd=1)
        self.config(relief="solid")
        self.create_text(300,10,text="Sample Text")

root = Tk()

first_element = elements(root,"method_a")
first_element.grid(row=0,column=0,padx=5,pady=2)

mainloop()