【发布时间】:2014-08-10 18:19:51
【问题描述】:
我正在尝试将 2 个 Tkinter 程序放在一起。从用户输入的 URL 中获取每个字母的所有出现次数,并在文本框中显示每个字母的计数。另一个是创建直方图的turtle 模块。我希望每个字母的出现都显示为直方图,字母的标签在 x 轴上。
这是我的代码:
from tkinter import *
import tkinter.messagebox
import urllib.request
import turtle
counts = 0
def main():
analyzeFile(url.get())
list = [counts]
drawHistogram(list)
def analyzeFile(url):
try:
infile = urllib.request.urlopen(url)
s = str(infile.read().decode()) # Read the content as string from the URL
counts = countLetters(s.lower())
infile.close() # Close file
except ValueError:
tkinter.messagebox.showwarning("Analyze URL",
"URL " + url + " does not exist")
def countLetters(s):
counts = 26 * [0] # Create and initialize counts
for ch in s:
if ch.isalpha():
counts[ord(ch) - ord('a')] += 1
return counts
def drawHistogram(list):
WIDTH = 400
HEIGHT = 300
raw_turtle.penup()
raw_turtle.goto(-WIDTH / 2, -HEIGHT / 2)
raw_turtle.pendown()
raw_turtle.forward(WIDTH)
widthOfBar = WIDTH / len(list)
for i in range(len(list)):
height = list[i] * HEIGHT / max(list)
drawABar(-WIDTH / 2 + i * widthOfBar,
-HEIGHT / 2, widthOfBar, height)
raw_turtle.hideturtle()
def drawABar(i, j, widthOfBar, height):
raw_turtle.penup()
raw_turtle.goto(i, j)
raw_turtle.setheading(90)
raw_turtle.pendown()
raw_turtle.forward(height)
raw_turtle.right(90)
raw_turtle.forward(widthOfBar)
raw_turtle.right(90)
raw_turtle.forward(height)
window = Tk()
window.title("Occurrence of Letters in a Histogram from URL")
frame1 = Frame(window)
frame1.pack()
scrollbar = Scrollbar(frame1)
scrollbar.pack(side = RIGHT, fill = Y)
canvas = tkinter.Canvas(frame1, width=450, height=450)
raw_turtle = turtle.RawTurtle(canvas)
scrollbar.config(command = canvas.yview)
canvas.config( yscrollcommand=scrollbar.set)
canvas.pack()
frame2 = Frame(window)
frame2.pack()
Label(frame2, text = "Enter a URL: ").pack(side = LEFT)
url = StringVar()
Entry(frame2, width = 50, textvariable = url).pack(side = LEFT)
Button(frame2, text = "Show Result", command = main).pack(side = LEFT)
window.mainloop()
从def main():开始是直方图部分。如何组合这些以使直方图显示在文本框的位置?提前感谢您的任何意见!
编辑:
【问题讨论】:
-
您是否有特定的原因要使用海龟而不是在 Tkinter 画布上绘制矩形?
-
这是一个家庭作业问题,它声明使用乌龟。我的编辑包括它应该是什么样子的屏幕截图。