2017-02-28 98 views
0

以下是我目前正在研究的第一個python項目的摘錄。Tkinter中的Checkbutton小部件(OOP)

我能夠將檢查按鈕添加到GUI中,但它實際上是無用的,因爲我無法找到如何從checkbutton獲取值。

import tkinter as tk 
from tkinter import * 
class base(tk.Tk): 

    def __init__(self, *args, **kwargs): 

     tk.Tk.__init__(self, *args, **kwargs) 

     #tk.Tk.iconbitmap(self, "iconz.ico") 
     tk.Tk.wm_title(self, "Mandelbrot Renderer") 

     container = tk.Frame(self) 
     container.pack(side="top", fill="both", expand = True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 

     self.frames = {} 

     for F in (StartPage, MainPage): 
      frame = F(container, self) 
      self.frames[F] = frame 
      frame.grid(row=0, column=0, sticky="nsew") 

     self.show_frame(StartPage) 

    def show_frame(self, cont): 

     frame = self.frames[cont] 
     frame.tkraise() 

class MainPage(tk.Frame): 
    def getcheckvalue(self): 
     print (self.mvar.get()) 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label = tk.Label(self, text="Graph Page!", font=LARGE_FONT) 
     label.pack(pady=10,padx=10) 

     button1 = ttk.Button(self, text="Back to Home", 
         command=lambda: controller.show_frame(StartPage)) 
     button1.pack() 

     button2 = ttk.Button(self, text="Re-Render", 
         command=self.getcheckvalue) 
     button2.pack() 
     mvar = IntVar() 
     self.cbutton = ttk.Checkbutton(self, text="shadow",onvalue=1, offvalue=0, variable=mvar) 
     self.cbutton.pack() 


app = base() 
app.geometry ("800x600") 
app.mainloop() 
+0

[獲取Tkinter的複選框的狀態]的可能的複製(http://stackoverflow.com/questions/4236910/getting-tkinter-check-box-state) – WhatsThePoint

回答

1
mvar = IntVar() 

在這一行,你要創建一個本地mvar。要從__init__方法之外訪問它,您需要通過添加self.前綴使其變爲類變量。

self.mvar = IntVar() 
self.cbutton = ttk.Checkbutton(..., variable=self.mvar) 
+0

太謝謝你了 – Simon