2017-03-30 5 views
1

Angenommen, wir haben viele Schaltflächen mit festgelegten Texten & Standorten.welche Schaltfläche sollte angezeigt werden

Zum Beispiel sind unsere Tasten {'main', 'report', 'memory', 'bills', ...}, Jetzt haben wir ein Array, das bestimmt, welche Schaltfläche sichtbar sein soll.

Zum Beispiel z1 = ['Bericht', 'Rechnungen'], der Inhalt dieses Arrays kann die anderen Schaltflächen sein. Wie kann ich den Code schreiben? Sollte ich den Text jeder Schaltfläche mit dem Array "z1" vergleichen, bevor ich jede Schaltfläche definiere? Dies ist nicht sinnvoll, weil die Anzahl der Tasten sehr groß ist.

Das ist mein Beispielcode:

z1=['report','bills','setting'] 

    self.button = Button(self.master,text="memory", command=self.ouvrir) 
    self.button.grid(row=1, column=1) 

    self.button2 = Button(self.master,text="report", command=self.tabluh) 
    self.button2.grid(row=1, column=2) 


    self.button3 = Button(self.master,text="setting", command=self.new_window) 
    self.button3.grid(row=1, column=3) 

    self.button4 = Button(self.master,text="calibration", command=self.cal) 
    self.button4.grid(row=1, column=4) 


    self.button5 = Button(self.master,text="empty weight", command=self.weighing) 
    self.button5.grid(row=1, column=5) 

    self.button6 = Button(self.master,text="bills", command=self.history) 
    self.button6.grid(row=1, column=6) 

    self.button7 = Button(self.master,text="full weight", command=self.full) 
    self.button7.grid(row=1, column=7) 

Antwort

0

Eine Möglichkeit, dies durch die Speicherung Ihrer Befehle in einem Wörterbuch als Wert und den Text als Schlüssel zu tun ist. Wenn Sie der GUI eine Liste mit den Schlüsseln geben, die Sie sehen möchten, wählt er die richtigen Schlüssel aus. Als Nächstes erstellen Sie dynamisch die Schaltflächen.

Mit freundlichen Grüßen, S

from tkinter import * 

class Window: 
    def __init__(self, root,a): 
     self.root = root 
     action = self.find_command(a) 

     for y,element in enumerate(action): 
      self.Make_Button(1,y, element[0], element[1]) 



    def find_command(self, list_): 
     d = {"test": self.printX, "value" : self.printY, "practice" : self.printZ} 
     action = [] 
     for element in list_: 
      for key, value in d.items(): 
       if key == element: 
        action.append([key, value]) 
     return(action) 


    def Make_Button(self, x, y, text_, command_): 
     self.StopButton = Button(self.root, text = text_, command = command_) 
     self.StopButton.grid(row = x, column = y, columnspan = 1, pady=(2,1)) 

    def printX(self): 
     print("testX") 

    def printY(self): 
     print("testY") 

    def printZ(self): 
     print("testZ") 


a = ["test", "practice"] 

root = Tk() 
Window = Window(root,a) 
Window.root.mainloop() 
+0

statt self.StopButton überschreiben, schlage ich vor, Sie 'setattr (self, Taste _ '+ text.replace (““, "_"), Taste]'. Diese speichert den Button auch nach dem Namen, so dass Sie später darauf zugreifen können (mit 'getattr '), wenn Sie eine Aktion ausführen möchten – arrethra

+0

danke ... es ist sehr gut ... wie kann ich eine feste bestimmen Ort für jede Schaltfläche (entweder Schaltfläche oder nicht) – feri

+0

Ich verstehe Ihre Frage nicht vollständig Die Position auf dem Raster Dies tun Sie, indem Sie die X- und Y-Koordinaten ändern –

Verwandte Themen