Python tkinter Двойные флажки - PullRequest
0 голосов
/ 15 марта 2019

В настоящее время я работаю над синтезатором внутри python для школьного проекта, и в настоящее время у меня действительно неприятная проблема. У меня есть стопка флажков, которые отмечаются при воспроизведении ноты и на поле внутри секвенсера. Моя проблема заключается в том, что всякий раз, когда я открываю два Осциллятора в моем синтезаторе и вставляю значения в флажки, флажки дублируют свое значение в нескольких окнах, но не делают этого для фактической последовательности, как у меня есть два списка с правильными значениями , но значения не отображаются должным образом внутри окна.

Чтобы воспроизвести проблему, нажмите «Новый генератор», затем нажмите «Арпеджио», сделайте это второй раз и установите любой флажок в Арпеджио Windows

Я знаю, что это может быть сбивающим с толку объяснением, но я собираюсь связать полный код внизу, чтобы вы могли его опробовать и могли знать, о чем я рассказываю.

Проблема возникает внутри класса "Арпеджио"

import numpy                                # used for Waveform Calculation
from functools import partial               # used for Command Combining
from tkinter import *                       # used for GUI
from tkinter import ttk                     # used for GUI
from tkinter import filedialog              # used for GUI

np = numpy                      # Simplifying Libraries
tk = ttk                        # Simplifying Libraries
fd = filedialog                 # Simplifying Libraries

root = Tk()

#StartupFunction
def StartUp():
    print("")
    print("Starting Startup") 
    app = App(root)                 # Initializing GUI

    print("Finished Startup")
    main()
    ("Exiting Startup")

#Main Program Function
def main():
    print("Executing Main")
    root.mainloop()
    print("Finished Main")
    return 0

class Oscillator():
    pass

class App(tk.Frame):
    OscillatorWindowList = []
    OscillatorList = []
    SoundInputArrayList = []
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        root.title("PySynth")
        root.geometry("984x300")
        root.resizable(False, True)
        root.maxsize(984,720)
        btnNewOscillator = Button(root,text="New Oscillator",command=self.NewOscillator,relief=RIDGE,bg="#2d2d2d",fg="white")
        btnNewOscillator.place(x = 8, y = 8+128)

    def NewOscillator(self):
        print("AddingOscillator")
        self.OscillatorList.append(Oscillator())
        self.SoundInputArrayList.append(SoundInputArray(root,len(self.OscillatorList)-1,len(self.OscillatorList)-1))
        print(self.OscillatorList)
        self.OscillatorWindowList.append(OscillatorGUI(root,self.OscillatorList[len(self.OscillatorList)-1],len(self.OscillatorList)))

    def EXIT(self):
        root.destroy()

#$SoundInputArray
class SoundInputArray():
    actv = []
    CheckbuttonList = []
    CheckButtonFreq = []
    i=0
    ButtonCount = 32
    VolumeSlider = None
    btnArpeggio = None
    Arpeggio = None
    hasArpeggio = False
    LFO = None
    ArpeggioList = [(0,0)]

    def __init__(self,master,oscillatorCount,number):
        btnArpeggio = Button(master,text="Arpeggio",command=self.OpenArpeggio,relief=RIDGE,bg="#2d2d2d",fg="white")
        btnArpeggio.place(x = 8, y = (1+oscillatorCount)*48 +128 )

    def OpenArpeggio(self):
        if self.Arpeggio == None:
            self.Arpeggio = Arpeggio()

    def GetArpeggio(self):
        return self.Arpeggio

#$Arpeggio
class Arpeggio():
    SoundValueList = None

    def __init__(self):
        GUI = Toplevel(root)
        GUI.title("Arpeggio")
        GUI.geometry("480x320")
        GUI.resizable(False, False)
        GUI.configure(bg="#171717")
        self.SoundValueList = np.arange(0,16)
        self.DrawUI(GUI)
        self.ClearList()

    def DrawUI(self,frame):
        Button(frame,text="display", command= self.PrintSound, width=11,bg="#171717",).place(x = 4, y = 4)
        Button(frame,text="empty", command= self.ClearList).place(x = 96, y = 4)
        y = 1
        x = 1
        checkbuttonList = []
        for y in range(1,13):
            for x in range(0,16):
                updatecommand = partial(self.UpdateList,x,y)
                checkbuttonList.append(Checkbutton(frame, variable=self.SoundValueList[x], onvalue=y, offvalue=0,command = updatecommand))
                checkbuttonList[len(checkbuttonList)-1].place(x = x*24 + 96, y= y*24 + 8)
    def ClearList(self):
        for i in range(0,16):
            self.SoundValueList[i] = 0
    def UpdateList(self,x,value):
        if (self.SoundValueList[x] == value):
            self.SoundValueList[x] = 0
        else:
            self.SoundValueList[x] = value
        self.PrintSound()
    def PrintSound(self):
        print(self.SoundValueList)
    def GetList(self):
        print(self.SoundValueList)
        return self.SoundValueList

StartUp() # Initiate Programm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...