gpt4 book ai didi

python - 全局变量和附加用于其他顶级函数

转载 作者:行者123 更新时间:2023-12-01 05:04:20 24 4
gpt4 key购买 nike

我正在尝试为一个执行一些数学运算的小程序创建一个“管理”部分。

主 TK 窗口上的管理按钮创建一个带有输入字段的顶级窗口,只有在密码字段中输入正确的密码时(或者至少当我弄清楚如何执行此操作时才会打开)。 )

提交按钮的目的是更新价格的全局变量,然后程序会从输入字段中记住该变量,该输入字段将由用户输入新的价格。我遇到的问题是如何在按下此按钮后更新和更改全局变量并保持更改。

这段代码只是为了测试执行此操作的能力而设计的,但出于上下文考虑,我无论如何都会将其发布在这里。任何对实现这一目标的帮助都将是非常棒的。

问题是这段代码不起作用,它不允许我更改全局变量,并产生错误:变量 int 没有属性附加?

此外 - 所以追加是错误的举动,公平地说,我遇到的问题是 global12mmprice = 200 没有更新全局变量,并且在程序中的其他点它仍然引用原始值。有没有办法彻底更新全局变量,让程序反射(reflect)新值,旧值不复存在?

global12mmprice = 86.67
global15mmprice = 191.19
int12mmprice = int(global12mmprice)
int15mmprice = int(global15mmprice)


class mainwindow(tk.Frame):
def __init__(self, root):
tk.Frame.__init__(self, root)
b1 = tk.Button(self, text="Glass Table", command = self.glsqWindow)
b1.grid(column=1,row=2,pady=50,padx=10)
self.count = 0
b2 = tk.Button(self, text='Round Table', command = self.glrnWindow)
b2.grid(column=2,row=2,pady=50,padx=10)
self.count = 0
b3 = tk.Button(self, text='Console Table', command = self.glcnWindow)
b3.grid(column=3,row=2,pady=50,padx=10)
self.count = 0
b4 = tk.Button(self, text='Admin', command = self.admin)
b4.grid(column=4,row=2,pady=50,padx=10)
self.count = 0


def admin(self):
self.count += 1
window = tk.Toplevel(self)
window.geometry("600x350+300+300")

def submit():
int12mmprice.append(200)


b1 = tk.Button(window,text='Submit', command=submit)
b1.grid(column=3,row=2,pady=50,padx=10)

此后还有很多代码,但这是相关部分。当然,我们也欢迎您提出任何一般性建议。

答案:- 得到了“fdhsdrg”的大量帮助。这是我实现的解决方案,以便为将来有此问题的任何人获得所需的结果。

正如向我解释的那样,我需要创建一个程序可以读取和写入的文件,该文件将为程序创建必要的信息,以便程序在需要时访问和更改。

import tkinter as tk
from tkinter import *
from tkinter import Tk, Frame, Menu
import tkinter.messagebox as box
import pickle, os

file=open('prices.dat','rb')
data=pickle.load(file)
file.close
global12mmprice = data[0]
global15mmprice = data[1]

class mainwindow(tk.Frame):
def __init__(self, root):
tk.Frame.__init__(self, root)
b1 = tk.Button(self, text="Glass Table", command = self.glsqWindow)
b1.grid(column=1,row=2,pady=50,padx=10)
self.count = 0
b2 = tk.Button(self, text='Round Table', command = self.glrnWindow)
b2.grid(column=2,row=2,pady=50,padx=10)
self.count = 0
b3 = tk.Button(self, text='Console Table', command = self.glcnWindow)
b3.grid(column=3,row=2,pady=50,padx=10)
self.count = 0
b4 = tk.Button(self, text='Admin', command = self.admin)
b4.grid(column=4,row=2,pady=50,padx=10)
self.count = 0


def admin(self):
self.count += 1
window = tk.Toplevel(self)
window.geometry("600x350+300+300")



def submit():
global data
data[0] = '86.67'
file=open('prices.dat','wb')
pickle.dump(data,file)
file.close
global root
box.showinfo('Administration','The program will now terminate and the prices will be updated.')
root.destroy()
b1 = tk.Button(window,text='Submit', command=submit)
b1.grid(column=3,row=2,pady=50,padx=10)

正如您所看到的 .dat 文件中的数据列表已更新,稍后我将用 get.entry() 字段替换它,但现在这演示了预期的设计。如果您希望程序在关闭后自动重新启动,您可能需要考虑使用 Resetboard 而不是 destroy。

最佳答案

嗯,您添加的错误消息几乎解释了一切。int12mmprice是一个Integer,没有append方法。 Append 是一种可用于 List 类型的对象的方法:

>>> a=9
>>> type(a)
<type 'int'>
>>> a.append(15)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a.append(15)
AttributeError: 'int' object has no attribute 'append'

>>> a=[9]
>>> type(a)
<type 'list'>
>>> a.append(15)
>>> a
[9, 15]

编辑:

对了,现在是范围问题。要编辑全局 int12mmprice,请将 global int12mmprice 放在 submit 函数的开头。这可以确保 submit 不会在其自己的函数范围内查看 int12mmprice,而是在全局范围内查看。

关于python - 全局变量和附加用于其他顶级函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25360371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com