python 修正:各种 tkinter 选项菜单选择相同的选项

python bugfix: various tkinter option menus pick same option

我正在 Python 中为微控制器板的接口编写一个 GUI,使用户能够 select 使用 tkinter 读取每个通道的传感器类型。因为有其中一些,我想通过循环设置它们。现在的问题是,每当我为一个小部件选择一个选项时,其他小部件也会选择该选项。显然我希望能够选择不同的选项每个频道。

import tkinter as tk
import numpy as np

root = tk.Tk()


class Window(tk.Frame):

    def __init__(self, root): 
        self.root = root 
        tk.Frame.__init__(self, root)
        self.root.title("Einstellungen")
        self.root.geometry(newGeometry="320x200")
        self.pack()

        self.bg = tk.Canvas(self.root)
        self.bg.pack()

        analogChannelsIn = tk.LabelFrame(self.root, text="Input", width=100)
        analogChannelsIn.pack()
        self.AnaOptions = np.array([[["-None-"], ["K-type Thermocouple"], ["rH Sensor"]] * 7], 'object')
        self.AnaOptions = self.AnaOptions.reshape([7, 3])
        self.addm = np.array([tk.StringVar()] * 7, 'object')
        self.acdd = np.zeros(7, 'object')
        for i in range(0, 7, 1):
            self.acdd[i] = tk.OptionMenu(analogChannelsIn, self.addm[i],*self.AnaOptions[i])
            self.addm[i].set("-None-")
            self.acdd[i].pack()

settings = Window(root)

settings.mainloop()

问题是行:

self.addm = np.array([tk.StringVar()] * 7, 'object')

因为 [tk.StringVar()] * 7 创建了 7 次相同的列表 StringVar。要获得 7 个不同的 StringVar,请使用

self.addm = np.array([tk.StringVar() for i in range(7)], 'object')

相反。