2017-01-12 3 views
0

Прежде всего я только начал кодирование, и это для моего школьного проекта. У меня проблемы с возможностью изменения цвета кадров и меток из другого класса. Это может показаться нулевым вопросом, и я знаю, что мое программирование довольно плохое, но любая помощь будет оценена.Как настроить метки tkinter и цвета рамки из другого класса?

class Menubar(tk.Menu):   #Creates a class called Menubar 
    def __init__(self, master):  #Initializes the class. 

     menu = tk.Menu(root)  #Creates a Menu with variable menu inside root. 
     root.config(menu=menu)  #Configures it to a menu. 

     subMenu = tk.Menu(menu)  #Creates the sub menu inside menu. 
     menu.add_cascade(label = "File", menu = subMenu)  #Creates a drop down called File, in the submenu. 
     subMenu.add_command(label='New Day...', command = self.newday) #Creates a labels with a function newday. 
     subMenu.add_command(label='Quit', command = quit)  #Creates a labels with a function quit. 

     subMenu2 = tk.Menu(menu) #Creates a second submenu in the main menu. 
     menu.add_cascade(label = 'Theme Options', menu = subMenu2) #Creates a drop down in the second sub menu. 
     subMenu2.add_command(label = 'White Theme', command = self.whitetheme) #Creates the label White Theme and when clicked it will a command. 
     subMenu2.add_command(label = 'Dark Theme', command = self.darktheme) #Creates the label Dark Theme and when clicked it will a command. 

    def newday(self): 
     #Variable t stores the name that is given to the spread sheet file. 
     t = str(tm.strftime("%d-%m-%Y")) + ' - ' + str(tm.strftime("%A")) + '.xlsx' 
     wb = xl.Workbook()  #wb creates a new spread sheet file. 
     ws = wb.active  #ws grabs the active worksheet in the spread sheet. 

     labels = (    #This array stores the labels and formula that will be printed to the spread sheet. 
      ['Bags', ''], 
      ['Notes', ''], 
      ['£2', ''], 
      ['£1', ''], 
      ['50p', ''], 
      ['20p', ''], 
      ['10p', ''], 
      ['5p', ''], 
      ['2p', ''], 
      ['1p', ''], 
      ['Total Till', '=SUM(B3:B12)'], 
      ['Previous Till', ''], 
      ['Till','=B13-B14'], 
      ['Card', ''], 
      ['Cash', ''], 
      ['Day Total', '=SUM(B15:B17)'], 
     ) 

     r = 3 #Variable r stores value 3 
     c = 1 #Variable c stores value 1 

     for text, formulae in labels:    #The for loop will be used to print the array data in to the spread sheet. 
      ws.cell(row=r, column=c, value=text) #This will print the labels in to the rows. 
      ws.cell(row=r, column=c+1, value = formulae) #This will print the formula in to the column. 
      r += 1 

     wb.save(t) #Saves the workbook usung the name in variable t 

     msgbox.showinfo('Daily Accounts', 'New Day created.') #Outputs a messagebox that tells the user a new day is created. 

    def whitetheme(self): 
     varframe = frame.mainlabels(self) 
     self.lblBags.configure(bg = "black") 

    def darktheme(self): 
     self.frame.configure(bg = "black") 

Я хочу, чтобы иметь возможность нажать параметры темной и светлой темы и это изменит цвет рамки и этикетки в поле ниже класса.

class frame(tk.Frame): #Creates the class frame where the widgets will be held. 
    def __init__(self, master):  #Initializes the class. 
     self.frame = tk.Frame(master)  #A frame is created. 
     self.frame.configure(bg = "white") #Frame background colour changed to white. 
     self.frame.pack(fill="both", expand = True)  #Places the frame and fills to the window size. 

     self.toplabels() #Calls the function toplabels which houses the labels for the top of the program. 
     self.mainlabels() #Calls the function mainlabels which has all the labels for the program. 
     self.entryfields() #Calls the function entryfields which will create the entry fields for the user 
          #to enter the values. 
     self.buttons() #Calls the function buttons which will add the buttons to the main frame. 

    def toplabels(self):  #This function creates the top labels. 
     self.lblShopName = tk.Label(self.frame, text = 'Bargain Food & Wine', background = 'white') #Creates a label in the frame with the store name. 
     self.lblShopName.pack() #Positions the label in the centre. 

     self.lblCurrentDay = tk.Label(self.frame, text = "Day: " + tm.strftime("%A"), background = 'white') #Creates a label in the frame with the current day. 
     self.lblCurrentDay.place(x = 0 , y = 0) #Positions the label in the top left. 

     self.lblTime = tk.Label(self.frame, text = "Date: " + tm.strftime("%d/%m/%Y"), background = 'white') #Creates a label in the frame with the current date. 
     self.lblTime.place(x = 380, y = 0) #Positions the label in the top right. 

    def mainlabels(self): #Function creates the mainlabels for the programs. 
     self.lblBags = tk.Label(self.frame, text = "Bags: ", bg = "white")      #All the labels will be created in the frame and will have a white background. 
     self.lblBags.place(x = 20, y = 40)              #All the labels will placed in the frame using the place gemetry and co ordinates. 
     self.lblNotes = tk.Label(self.frame, text = "Total Notes: ", bg = "white") 
     self.lblNotes.place(x = 20, y = 60) 
     self.lbl2pound = tk.Label(self.frame, text = "£2: ", bg = "white") 
     self.lbl2pound.place(x = 20, y = 80) 
     self.lbl1pound = tk.Label(self.frame, text = "£1: ", bg = "white") 
     self.lbl1pound.place(x = 20, y = 100) 
     self.lbl50p = tk.Label(self.frame, text = "50p: ", bg = "white") 
     self.lbl50p.place(x = 20, y = 120) 
     self.lbl20p = tk.Label(self.frame, text = "20p: ", bg = "white") 
     self.lbl20p.place(x = 20, y = 140) 
     self.lbl10p = tk.Label(self.frame, text = "10p: ", bg = "white") 
     self.lbl10p.place(x = 20, y = 160) 
     self.lbl5p = tk.Label(self.frame, text = "5p: ", bg = "white") 
     self.lbl5p.place(x = 20, y = 180) 
     self.lbl2p = tk.Label(self.frame, text = "2p: ", bg = "white") 
     self.lbl2p.place(x = 20, y = 200) 
     self.lbl1p = tk.Label(self.frame, text = "1p: ", bg = "white") 
     self.lbl1p.place(x = 20, y = 220) 
     self.lblTotalTill = tk.Label(self.frame, text = "Total Till: ", bg = "white") 
     self.lblTotalTill.place(x = 20, y = 240) 
     self.lblTotalTillDisplay = tk.Label(self.frame, text = '£000.00', bg = "white") 
     self.lblTotalTillDisplay.place(x = 100, y = 240) 
     self.lblPrevTill = tk.Label(self.frame, text = "Previous Till: ", bg = "white") 
     self.lblPrevTill.place(x = 20, y = 260) 
     self.lblLeftTill = tk.Label(self.frame, text = "Final Till: ", bg = "white") 
     self.lblLeftTill.place(x = 20, y = 280) 
     self.lblLeftTillDisplay = tk.Label(self.frame, text = '£00.00', bg = "white") 
     self.lblLeftTillDisplay.place(x = 100, y = 280) 
     self.lblCard = tk.Label(self.frame, text = "Card: ", bg = "white") 
     self.lblCard.place(x = 20, y = 300) 
     self.lblCash = tk.Label(self.frame, text = "Cash: ", bg = "white") 
     self.lblCash.place(x = 20, y = 320) 
     self.lbldaytotal = tk.Label(self.frame, text = 'Day Total: ', bg = 'white', font = 16) 
     self.lbldaytotal.place(x = 300, y = 70) 
     self.lbldaytotal2 = tk.Label(self.frame, text = '£000.00', bg = 'white', font = 16) 
     self.lbldaytotal2.place(x = 380, y = 70) 

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

+0

см [тематические виджеты] (https://docs.python.org/2/library/ttk.html#ttk-widgets) и стили – furas

ответ

0

Я написал пример, чтобы показать вам, как использовать стили ttk. Вы делаете свои классы, наследуйте от виджетов tkinter, но вы не используете его в методе __init__, поэтому мой класс Menubar дает вам пример.

import tkinter as tk 
import tkinter.ttk as ttk 

class Menubar(tk.Menu): 
    def __init__(self, master): 
     # create the menu using tk.Menu init method 
     tk.Menu.__init__(self, master) 
     # display menu on the master window 
     master.configure(menu=self) 

     # create style used to change theme 
     self.style = ttk.Style(master) 
     self.whitetheme() 

     subMenu = tk.Menu(self, tearoff=False) 
     self.add_cascade(label='Theme Options', menu=subMenu) 
     subMenu.add_command(label ='White Theme', command = self.whitetheme) 
     subMenu.add_command(label ='Dark Theme', command = self.darktheme) 

    def whitetheme(self): 
     self.style.configure('TFrame', background='white') 
     self.style.configure('TLabel', background='white', foreground="black") 

    def darktheme(self): 
     self.style.configure('TFrame', background='black') 
     self.style.configure('TLabel', background='black', foreground="white") 


if __name__ == "__main__": 
    root = tk.Tk() 

    Menubar(root) 
    # use ttk frames and labels 
    frame = ttk.Frame(root) 
    frame.pack(fill='both', expand=True) 

    ttk.Label(frame, text="Your text here").pack(padx=20, pady=20) 

    root.mainloop() 
Смежные вопросы