我创建了一个从列表中读取某些字符串的函数。
应该在用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)
答案 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()