请帮忙!我正在使用 Spyder IDE 在 Python 中编写程序。我正在使用 tkinter。我的程序包含多个 Scale 小部件,这些小部件一直按我的意愿正常工作且独立。然而,两个尺度现在似乎相互依赖,因为它们的var
参数(它们是单独的变量)被初始化为相同的值。
我做了一个简化的 tkinter 程序来说明这个问题。此代码旨在模仿我的实际项目的结构 - 因此它可能看起来不像它可以的那样高效。制作了两个单独的比例尺,带有单独的变量和单独的更新命令。当两个全局变量都被初始化为相同的值时,刻度相互依赖,并且在只操作一个时都移动。当两个全局变量被初始化为不同的值时,比例可以正常工作并且符合预期。
为什么会这样?我需要我的实际项目中的两个全局变量是相同的值。我怎样才能使这项工作?
这是代码:
import tkinter as tk
from tkinter import ttk
global firstvalue
global secondvalue
firstvalue = 1000
secondvalue = 1000
class ScaleTest(tk.Tk):
def __init__(self, *args, **kwargs):
# Creates tkinter window and container for frames
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.wm_title(self, "Scale Test")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
# Add ScaleTestFrame frame to container and show the frame
self.frames = {}
frame = ScaleTestFrame(container, self)
self.frames[ScaleTestFrame] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(ScaleTestFrame)
# Method to show the input frame.
def show_frame(self, cont):
self.deiconify() # Show main tkinter window
frame = self.frames[cont]
frame.tkraise()
# Class that defines the frame to display the algorithm creation parameters.
class ScaleTestFrame(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
MakeFirstScale(self)
MakeSecondScale(self)
# Methods for scales
def FirstScaleUpdate(event):
global firstvalue
firstvalue = int(float(event))
def MakeFirstScale(self):
self.first_scale = tk.Scale(self, from_=0, to=5000, resolution = 10, var = firstvalue, orient=tk.HORIZONTAL, length = 360, label = "First Scale", command = FirstScaleUpdate)
self.first_scale.grid(row = 1, rowspan = 2, column=0, columnspan=10, sticky='wes', padx = 10, pady = (0,10))
self.first_scale.set(1000)
def SecondScaleUpdate(event):
global secondvalue
secondvalue = int(float(event))
def MakeSecondScale(self):
self.second_scale = tk.Scale(self, from_=0, to=2000, resolution = 10, var = secondvalue, orient=tk.HORIZONTAL, label = "Second Scale", command = SecondScaleUpdate)
self.second_scale.grid(row = 3, rowspan = 2, column=0, columnspan=4, sticky='wes', padx = 10, pady = (0,10))
self.second_scale.set(1000)
app = ScaleTest()
app.resizable(0,0)
app.mainloop()