В Python/Tkinter я пытаюсь получить значение (целое число) из фрейма, выполнить вычисление на нем и вернуть его в качестве вывода. Я смог заставить его работать, используя только мастер-фрейм и помещая все в один кадр. Теперь я хочу разделить его и другую операцию в свои собственные рамки.Выравнивание рамки Tkinter (макет сетки)
Моя программа преобразует ножки до ножек (рамка A) и Линейные ножки до ножек (рамка B).
Я получаю ошибки, такие как: NameError: global name 'b_entry' is not defined
. У меня такое чувство, что я могу делать что-то вроде ссылок на фреймы (self, master, a_frame и т. Д.) Неправильно.
Вот простой пример:
import Tkinter as tk
class App:
def __init__(self, master):
self.master = master
master.grid()
b_frame = tk.Frame(master).grid(row=0)
b_name = tk.Label(b_frame, text='Blah').grid(row=1, columnspan=4)
b_label = tk.Label(b_frame, text='Label').grid(row=2, column=0)
b_entry = tk.Entry(b_frame).grid(row=2, column=1)
b_output = tk.Label(b_frame, text='Output')
b_output.grid(row=3, columnspan=2)
b_button = tk.IntVar()
tk.Button(b_frame, text='calc', command=self.convert).grid(row=4, columnspan=2)
def convert(self):
a = int(b_entry.get())
result = int(a * a)
b_output.configure(text=result)
root = tk.Tk()
App(root)
root.mainloop()
А, ок. Это интересно. Я разделил код пакета/сетки до дня. Я заметил, что что-то вроде попыток сделать настройку на них заставило его выбросить ошибку. Я нашел ответ на этот вопрос при поиске SO. По общему признанию, я был немного ленив, объединив их, думая, что я бы сохранил некоторую типизацию, но теперь, когда вы упомянули об этом, отладка немного сложнее. Должен ли я помещать '.self 'перед каждой строкой или только строки, которые нужно вызвать? –
Это прославилось! Я очень ценю эту информацию. Я в основном учился, используя SO и Youtube для руководства. Я обнаружил, что он помогает мне перепроектировать исходные примеры и попытаться повторно реализовать их в моем коде. В большинстве случаев это работает, или, по крайней мере, дает мне точку перехода, чтобы попытаться выяснить, что работает, а что нет. Полагаю, иногда вам просто нужен прямой ответ на прямой вопрос. Спасибо за вашу помощь и время. Я очень ценю это. –
«Должен ли я ставить« я »перед каждой строкой или просто с линиями, которые нужно вызвать?» Вам просто _have_ поставить 'self.' перед назначением, что вы хотите быть доступным в других методах или вне класса полностью. Однако некоторые люди ставят их перед любым заданием, возможно, по эстетическим соображениям или потому, что считают, что им могут понадобиться эти ценности позже. Это в основном вопрос личных предпочтений. – Kevin