Как использовать запись tkinter в качестве параметра для функции - PullRequest
0 голосов
/ 27 апреля 2018

Я хотел бы, чтобы текстовое поле запрашивало ввод в окне 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 Ответ

0 голосов
/ 28 апреля 2018

Есть несколько вопросов:

1) Выберите один способ импорта tkinter, иначе возникнет путаница

2) Вы должны предоставить мастера для своих фреймов, а затем упаковать их. Обратите внимание на то, где появляются кадры и что они содержат.

3) Обычно для Записи присваивается текстовая переменная, которая будет содержать то, что вы вводите в нее. Текстовая переменная должна быть tk.StringVar.

4) Если у кнопки есть функция обратного вызова, она должна быть определена перед созданием кнопки.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...