Введения:Невозможно преобразовать TkInter значения поля ввода строки для целочисленных значений
Привет всем, у меня есть нулевой опыт в программировании, и я не удивительно возник некоторые трудности с моей первой программой ... был бы обязан, если кто-то может мне помочь пройдите через этот горб на дороге, пожалуйста.
Предыстория мой вопрос:
Я имею проблему, призывающую целые числа от поля ввода Tkinter. Настройка выполняется следующим образом: у меня есть фрейм с меткой дескриптора, поле ввода, кнопка подтверждения и метка подтверждения. Дизайн, который я имею в виду, заключается в том, что пользователь вводит номер, нажимает кнопку подтверждения, что приводит к сохранению введенного ввода и обновлению метки подтверждения. Эта часть я не имея какой-либо вопрос с и работает как надеялись ....
from tkinter import *
root = Tk()
root.geometry('450x700+10+10')
root.title("Design Suite Version: 1.0")
#Creating a labelframe for my entry box/button and confirmation label
myframe2 = LabelFrame(root, text = '2: Limit state design selections:')
myframe2.grid(row=0, column=1, padx=5, pady=5, sticky = 'nw')
#Label identifying input I expect in my entry box...
Label(myframe2,
text="Proposed Member Depth:",
justify = LEFT).grid(row=21, column=0, padx=5, pady=5)
#Constructing the function for the self updating label
def Selection6():
#text expected in the confirmation label
labeltext6 = "Depth(mm) = " + str(var6.get())
#configuring the updating label
label6.config(text = labeltext6, fg='red', padx=5, pady=5)
#confirmation label location
label6 = Label(myframe2)
#confirmation label location
label6.grid(row=27, column=0, padx=0, pady=5)
#set what var is here
var6 = IntVar()
# initializing the choice
var6.set('0')
#this is my first entry box
entry6 = Entry(myframe2, textvariable=var6, width = 25)
entry6.grid(row=25, column=0, padx=5, pady=5)
#this is my first button, when clicked, runs Selection6
button = Button(myframe2, text="Click to Confirm",width = 20,
command = Selection6)
button.grid(row=26, column=0, padx=5, pady=0)
##########################################################################
#Creating a 2nd label for my entry box/button and confirmation label
Label(myframe2,
text="Proposed Member Width:",
justify = LEFT).grid(row=28, column=0,padx=5, pady=5)
def Selection6a():
labeltext6a = "Width(mm) = " + str(var6a.get())
label6a.config(text = labeltext6a, fg='red', padx=5, pady=5)
label6a = Label(myframe2)
label6a.grid(row=31, column=0, padx=0, pady=5)
var6a = IntVar()
var6a.set('0')
entry6a = Entry(myframe2, textvariable=var6a, width = 25)
entry6a.grid(row=29, column=0, padx=5, pady=5, sticky = 'w')
button = Button(myframe2, text="Click to Confirm",width = 20,
command = Selection6a)
button.grid(row=30, column=0, padx=5, pady=0)
mainloop()
Начальное издание:
Где я изначально испытывал трудности, когда я пытался получить переменные входные сигналы от двух моих входа ящики (выше) и использовать их в дальнейшем в моей программе (ниже) с моей GUI через добавление следующего кода ...
##########################################################################
#Creating a 3rd label for my button and confirmation label
Label(myframe2,
text="Member Modulus:",
justify = LEFT).grid(row=32, column=0,padx=5, pady=5)
def Selection7():
labeltext7 = "Modulus(mm cubed) = ",
+ (((str(var6a.get()) * (str(var6.get()))**2))/6)
label7.config(text = labeltext7, fg='red', padx=5, pady=5)
label7 = Label(myframe2)
label7.grid(row=34, column=0, padx=0, pady=5)
var7 = IntVar()
var7.set('0')
button = Button(myframe2, text="Click for Modulus",width = 20,
command = Selection7)
button.grid(row=33, column=0, padx=5, pady=0)
mainloop()
Когда я пытаюсь получить две переменные var6.get() и var6a .get(), чтобы использовать в функции для обновления метки, я столкнулся с ошибкой следующим образом:
labeltext7 = "Modulus(mm cubed) = " + (((str(var6a.get()) * (str(var6.get()))**2))/6)TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int' Exception in Tkinter callback
Покушение Fix:
Я попытался преобразовать строку в целое число, переписав свою функцию следующим образом ....
def Selection7():
labeltext7 = "Modulus(mm cubed) = ",
+ (((int(var6a.get()) * (int(var6.get()))**2))/6)
label7.config(text = labeltext7, fg='red', padx=5, pady=5)
Текущий выпуск:
Когда я звоните Selection7()
через button = Button(myframe2, text="Click for Modulus"
Я не получаю вычисленное значение до labeltext7
. Теперь скрипт выполняется отлично, без ошибок, это моя проблема, я не могу получить вычисление для вывода функции ... любые комментарии, рекомендации или предложения приветствуются!
Некоторые из многих сообщений, которые были предложены на сайте, который я читал, но не могу найти свой ответ на:
How to get values from entry box with tkinter
tkinter set values in entry box
https://stackoverflow.com/questions/26935846/tkinter-entry-box-issues
Python posting answer from function to entry box in GUI
http://effbot.org/tkinterbook/entry.htm
UPDATE1:
Привет, спасибо, что нашли время, чтобы прокомментировать и ответить. Я включил документ для объяснения того, чего я надеялся достичь с помощью моей функции, надеюсь, это добавит некоторую дополнительную ясность в запрос.
Я сломал свой компактный код на мелкие кусочки, а также вынул запятую в соответствии с рекомендациями.
Вот переработанная часть кода, которую я до сих пор не могу получить, чтобы вывести желаемую функцию, любую помощь оценили.
Label(myframe2,
text="Member Modulus:",
justify = LEFT).grid(row=32, column=0,padx=5, pady=5)
"""
Selection 7()_Member Modulus:
Modulus for a rectangular section:
(Width of member x depth of member squared) divided by 6
width:var6a depth:var6
"""
def Selection7():
wdth = int(var6a.get())
dpth = int(var6.get())
dpthsqrd = int(dpth**2)
wdth_dpthsqrd = int((wdth * dpthsqrd))
mod = int(wdth_dpthsqrd/6)
labeltext7 = "Modulus (mm cubed) = "
+ int(mod)
label7.config(text = labeltext7, fg='red', padx=5, pady=5)
label7 = Label(myframe2)
label7.grid(row=34, column=0, padx=0, pady=5)
var7 = IntVar()
var7.set('0')
button = Button(myframe2, text="Click for Modulus",width = 20,
command = Selection7)
button.grid(row=33, column=0, padx=5, pady=0)
mainloop()
UPDATE1.1:
Привет всем, в UPDATE 1, я должен был расширен на то, что мой вопрос был. Проблема заключалась в том, что расчет в defSelection7()
не отображался в графическом интерфейсе на labeltext7
, как надеялся ... текст Modulus (mm cubed) =
отображался в графическом интерфейсе, когда был активирован Selection7
, но расчет int(mod)
не был.
UPDATE2:
По счастливой ноте, моя проблема решена, я сумел получить defSelection7()
, чтобы отобразить int(mod)
часть labeltext7
путем перемещения int(mod)
вверх линию и включал ,
.
См. Ниже пересмотренный код.
"""
Selection 7()_Member Modulus:
Modulus for a rectangular section:
(Width of member x depth of member squared) divided by 6
width:var6a depth:var6
"""
def Selection7():
wdth = int(var6a.get())
dpth = int(var6.get())
dpthsqrd = (dpth**2)
wdth_dpthsqrd = (wdth * dpthsqrd)
mod = (wdth_dpthsqrd/6)
labeltext7 = "Modulus (mm cubed) = ", mod
label7.config(text = labeltext7, fg='red', padx=5, pady=5)
label7 = Label(myframe2)
label7.grid(row=34, column=0, padx=0, pady=5)
var7 = IntVar()
var7.set('0')
button = Button(myframe2, text="Click for Modulus",width = 20,
command = Selection7)
button.grid(row=33, column=0, padx=5, pady=0)
mainloop()
Я счастлив, что у меня есть функционирование GUI, как надеялся. Я был бы немного счастливее, если бы кто-нибудь мог опубликовать ссылку для меня, чтобы прочитать, которая поможет мне определить, почему моя ревизия работает, я сжал labeltext7 = "Modulus (mm cubed) = " + int(mod)
от UPDATE1 к этой версии labeltext7 = "Modulus (mm cubed) = ", mod
UPDATE2, и мой графический интерфейс затем обновился, как ожидалось, потянув и отобразив расчет int(mod)
правильно «labeltext7».
проблемы, как это гораздо проще отлаживать, если вы не пытаетесь сделать так много в одной строке кода , Получите первую переменную в одном из операторов, преобразуйте ее в следующую, используйте ее в выражении в другом и добавьте ее в метку в другую. Это позволяет вам проверять каждое промежуточное значение. Нет никаких бонусных очков для сжатия всего этого в одну строку. –
Привет, Брайан, спасибо за быстрый ответ и рекомендацию, справедливую точку, сделанную на борту, я расширил часть кода, с которым я борюсь, и добавил документную строку, чтобы добавить некоторую ясность и облегчить мне помощь. необходимость. – Eoin
Итак, что он делает сейчас? Отображение неправильного значения? Сбои? Выброс ошибки? –