python - 如何使用 tkinter 条目作为函数的参数
问题描述
我想要一个文本框在 tkinter 窗口中要求输入,然后使用该输入作为参数来调用绘制谢尔宾斯基三角形的函数。我的按钮工作,但我的输入框没有。我一直在尝试修复我的代码,但它不起作用,任何帮助将不胜感激。
import tkinter as tk
from tkinter import *
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
root.title('Fractals') #titles the button box
top_frame = tk.Frame()
mid_frame = tk.Frame()
prompt_label = tk.Label(top_frame, \
text='Enter a number of iterations (more is better):')
iterations = tk.Entry(root,bd=1)
itr=iterations.get()
itr=int(itr)
button = tk.Button(frame,
text="QUIT",
fg="red",
command=quit)
button.pack(side=tk.LEFT)
sTriangle = tk.Button(frame,
text="Triangle",
command=lambda: sierpinski(fred, (-500,-500), (500,-500),
(0,500),itr))
sTriangle.pack(side=tk.LEFT)
fsquare = tk.Button(frame,
text="Square",
command=fractalsquare(fred,(-500,-500),(500,-500),
(500,500),(-500,500),itr))
fsquare.pack(side=tk.LEFT)
root.mainloop()
解决方案
有几个问题:
1) 选择一种方式导入 tkinter 否则会导致混乱
2)您应该为您的框架提供一个母版,然后将它们打包。注意框架出现的位置以及它们包含的内容。
3) 通常为条目分配一个文本变量,该条目将包含您输入的内容。文本变量应该是 tk.StringVar。
4) 如果Button有回调函数,则必须在创建按钮之前定义。
5) 变量fred 没有定义。
如何编写它的示例:
import tkinter as tk
root = tk.Tk()
root.title('Fractals') #titles the button box
# Create the Label at the top
top_frame = tk.Frame(root) # Top Frame for
top_frame.pack()
prompt_label = tk.Label(top_frame,
text='Enter a number of iterations (more is better):')
prompt_label.pack()
# Create the Entry in the middle
mid_frame = tk.Frame(root)
mid_frame.pack()
itr_string = tk.StringVar()
iterations = tk.Entry(mid_frame,textvariable=itr_string)
iterations.pack()
fred=None # Was not defined...
# Create Buttons at the bottom
bot_frame = tk.Frame(root)
bot_frame.pack()
button = tk.Button(bot_frame, text="QUIT", fg="red", command=quit)
button.pack(side=tk.LEFT)
def sierpinski(*args): # sTriangle button callback function
itr = int(itr_string.get()) # How to get text from Entry
# if Entry does not contain an integer this will throw an exception
sTriangle = tk.Button(bot_frame, text="Triangle",
command=lambda: sierpinski(fred, (-500,-500), (500,-500),(0,500),itr_string))
sTriangle.pack(side=tk.LEFT)
def fractalsquare(*args): pass # fsquare button callback function
fsquare = tk.Button(bot_frame, text="Square", command=fractalsquare(fred,
(-500,-500),(500,-500),(500,500),(-500,500),itr_string))
fsquare.pack(side=tk.LEFT)
root.mainloop()
您应该认真学习基本的 tkinter 教程。试试这个:Tkinter 简介
推荐阅读
- ios - 如何在 UITableView iOS Swift 中加载数组值 int 单元而不创建多个自定义单元?
- javascript - 使用 refs 从父级调用子挂钩函数
- python - 如何在 Python 的 for 语句中使用 if
- osgi - 跟踪整个 repo 中节点上的移动操作
- scala - Spark Checkpoint 分区无法转换为 CoGroup 分区
- python - PyQt5 错误:此应用程序无法启动,因为它无法找到或加载 Qt 平台插件“xcb”
- c++ - 在地图中使用步幅
- r - 删除列中的某些值(包含特定字符)
- jenkins - Jenkins 作业通过后,工作节点上的进程不会被杀死
- javascript - 我应该使用 mixins 还是实用程序类?