python - 将 Tkinter 条目存储到新变量中
问题描述
我正在编写一个程序,允许用户在文本框中输入一定的温度,然后根据用户输入显示相应的图形。我知道当我手动写入起始温度时程序可以工作,但我似乎无法弄清楚如何将用户输入值存储到正确的变量中然后使用。我将把整个程序放在下面,但是我的问题出在名为 PageTwo 的类中。我希望将输入的值存储为页面绘图部分中使用的变量名称“Tc”。我不断收到错误“AttributeError:'PageTwo' 对象没有属性 'ID1'”。任何帮助,将不胜感激。
import tkinter as tk
from tkinter import font as tkfont
from tkinter import *
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.title_font = tkfont.Font(family='Helvetica', weight="bold")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (PageTwo):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame("StartPage")
class PageTwo(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Temperature Distribution as a function of Distance")
label.pack(pady=10, padx=10)
button2 = tk.Button(self, text="Finish & Plot", command=self.plot)
button2.pack()
var1 = StringVar()
var1.set("Enter inner chamber temperature:")
label1 = tk.Label(self, textvariable=var1, height=2)
label1.pack()
ID1 = StringVar()
entry1 = tk.Entry(self, bd=4, textvariable=ID1)
entry1.pack()
def read_inputs(self):
x = self.entry1.get()
def plot(self):
Tc = self.read_inputs()
f = 49
h1 = 50
L1 = .05
L2 = .022
L3 = .1125
k_sand = 0.27
k_water = 0.6
k_brick = 0.72
e_sand = 0.343
k_ws = e_sand * k_water + (1 - e_sand) * k_sand
T4 = -((f * (1 / h1)) - Tc)
T3 = -((f * (L1 / k_al)) - T4)
T2 = -((f * (L2 / k_ws)) - T3)
T1 = -((f * (L3 / k_brick)) - T2)
print(T4, T3, T2, T1)
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
解决方案
首先,您的代码不起作用。读这个。我建议至少在将代码发布到此处之前尝试运行代码...
您的代码不起作用,因为您试图在一个对象内部使用,当您在类下调用时pack
,该对象具有使用的从属。tkinter 永远不会让你这样做。grid
self.pack
PageOne
然后你说你收到的错误是"AttributeError: 'PageTwo' object has no attribute 'ID1'"
. 为此,您需要在类内的ID1
某处self
声明PageTwo
变量,而您不需要。
在 PageTwo 类的 init 方法中,您将 tkinter Entry 小部件声明为entry1
.
稍后你self.entry1
在你的read_inputs
函数中使用。所以这是一个简单的修复,只需声明entry1
为self.entry1
...
class PageTwo(tk.Frame):
def __init__(self, parent, controller):
...
ID1 = StringVar()
self.entry1 = tk.Entry(self, bd=4, textvariable=ID1)
self.entry1.pack()
...
def read_inputs(self):
x = self.entry1.get()
我无法运行您的代码来验证这一点,但我敢打赌,由于变量名称不正确,您无法读取输入。
推荐阅读
- gitlab - 使用来自 git 存储库的标签标记 docker 映像
- java - 如何按月/年过滤数据
- c# - 用于 C# 应用程序的 PHP 控制的 MySQL 数据库
- android - Android 8.0 中没有用于 netty initChannel 的堆栈跟踪
- node.js - Prometheus 客户端不返回自定义指标
- git - 如何从存储库中的当前 git 分支中找到原始复制的 git 分支名称?
- c# - 将语音转换为文本 C#
- command-line-interface - Hyperledger 开发课程安装 CLI 失败
- swagger - 导入类型的必需值未显示在“示例值”列表中
- spring - 在 Spring Boot 中不使用异常作为流控制时的服务方法事务性