2015-04-04 154 views
0

我正在关注在Python中创建GUI的Sentdex教程found herespecifically this part。然而,教程是在Python 3中,我使用的是2.7。Tkinter和Python中的ttk 2.7

导入Tkinter是好的,但是当我来导入ttk,然后将它继承到类中出现问题。在Python 2.7 ttk是一个单独的模块,这意味着不在Tkinter类。

import Tkinter as tk 
import ttk 

LARGE_FONT= ("Verdana", 12) 


class SeaOfBTCApp(tk.Tk): 

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

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

     tk.Tk.wm_title(self, "Seal of BTC") 

     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, PageOne, PageTwo): 
      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() 

的问题似乎是,当类继承TK,当我这样做:

button = ttk.Button(self, text="Visit Page 1", command=lambda: controller.show_frame(PageOne)) 

它不使用ttk,按钮仍然看起来是一样的(如当它是tk.Button)。如何让按钮看起来像ttk按钮,请帮助。

全码:

import Tkinter as tk 
from ttk import * 


LARGE_FONT= ("Verdana", 12) 


class SeaOfBTC(tk.Tk): 

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

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

     tk.Tk.wm_title(self, "Sea of BTC") 

     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, PageOne, PageTwo): 
      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 StartPage(tk.Frame): 

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

     button = ttk.Button(self, text="Visit Page 1", 
         command=lambda: controller.show_frame(PageOne)) 
     button.pack() 

     button2 = ttk.Button(self, text="Visit Page 2", 
         command=lambda: controller.show_frame(PageTwo)) 
     button2.pack() 


class PageOne(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label = tk.Label(self, text="Page One!!!", 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="Page Two", 
         command=lambda: controller.show_frame(PageTwo)) 
     button2.pack() 


class PageTwo(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label = tk.Label(self, text="Page Two!!!", 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="Page One", 
         command=lambda: controller.show_frame(PageOne)) 
     button2.pack() 



app = SeaOfBTC() 
app.mainloop() 

在此先感谢。

回答

0

如果您使用ttk.Button,那绝对是使用ttk按钮。它不可能做任何事情,因为你明确地说要使用ttk模块中的Button类。

注意:根据您所在的平台,tk和ttk按钮可能看起来完全相同。

除了你进行导入的方式之外,python 2.x和3.x中的tkinter几乎没有区别。

+0

我在Ubuntu 12.04上 – EpsilonX 2015-04-04 14:19:03