2017-06-05 84 views
0

我想將左自定義小部件顯示3次。左,中,右。爲什麼不顯示自定義小部件

我一直努力遵循和混合一些例子我已經找到了,但我只得到一個小窗口呈現。

我已經加入colout得到一些線索,但我無法找到我在做什麼錯。

這是代碼:

import sys 
import tkinter as tk 
#import tkinter.ttk, Font, Label, Frame as tk 
#import tkinter.ttk as tk 

#https://stackoverflow.com/questions/27614037/python-3-tkinter-create-text-widget-covering-100-width-with-grid?rq=1 
# https://stackoverflow.com/questions/7591294/how-to-create-a-self-resizing-grid-of-buttons-in-tkinter 
# http://effbot.org/tkinterbook/grid.htm 

# 02. Pruebo cambiando llamada de funcion de clase a metodo de instancia 

class Cuadro(tk.Frame): 
    def __init__(self, parent, *args, **kargs): 

     # super().__init__(root) 
     tk.Frame.__init__(self, parent, *args, **kargs) 

     #Create & Configure frame 

     frame = tk.Frame(parent)  
     frame.grid(row=0, column=0, sticky="NSEW") 



     #Create a 3x3 (rows x columns) grid of labels inside the frame 
     for row_index in range(3): 
     #tk.Grid.rowconfigure(frame, row_index, weight=1)    # version 02 
      frame.rowconfigure(row_index, weight=1)      # version 02 
      for col_index in range(3): 
       #tk.Grid.columnconfigure(frame, col_index, weight=1) # version 02 
       frame.columnconfigure(col_index, weight=1)    # version 02 
       lbl = tk.Label(frame, text = str((row_index *3) + col_index + 1)) #create a button inside frame 
       #lbl.grid(row=row_index, column=col_index, sticky=N+S+E+W) 
       lbl.grid(row=row_index, column=col_index, sticky="NSEW") 



#Create & Configure root 
class Application(tk.Frame): 
    def __init__(self, parent): 

     tk.Grid.rowconfigure (parent, 0, weight=1) 
     tk.Grid.columnconfigure(parent, 0, weight=1) 
     tk.Grid.columnconfigure(parent, 1, weight=1) 
     tk.Grid.columnconfigure(parent, 2, weight=1) 
     self.cuadro1 = Cuadro(parent) 
     self.cuadro1.config(background="red") 
     self.cuadro1.grid(row=0, column=0, sticky="NSEW")  
     self.cuadro2 = Cuadro(parent) 
     self.cuadro2.config(bg="green") 
     self.cuadro2.grid(row=0, column=1, sticky="NSEW") 
     self.cuadro3 = Cuadro(parent) 
     self.cuadro3.config(bg="blue") 
     self.cuadro3.grid(row=0, column=2, sticky="NSEW") 


def main(): 
    root = tk.Tk() 
    root.title(sys.argv[0]) # version 02 

    myapp = Application(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

這是結果:

http://imgur.com/XROp68R

有什麼不對?

+2

4次或3次?你說的是左分和右。那只是3. –

+0

不好意思! Tipyng錯誤。 :-(。我有固定它。 – Chemag

回答

0

你的三個Cuadro對象必須在所有沒有內容 - 他們是有效幀,因爲你從tk.Frame繼承稱作超__init__(),但你沒有與他們絕對沒有。相反,每個人都創建了一個完全獨立的框架,沒有連接到Cuadro本身,並將其放置在父視圖的row = 0,column = 0處。它們中的每一個覆蓋了前一個,以及最初放置在行= 0,列= 0的紅色Cuadro,所以最後只有一個可見的3x3網格副本,沒有紅色區域。

您在應用程序中犯了同樣的錯誤 - 它是一個有效的框架,但您沒有添加任何內容,而是將每個Cuadro創建爲應用程序父項(Tk根窗口)的直接子項。

這是完全有效的,僅僅創造這樣的小部件類,但是如果你不打算爲自己的小部件使用他們,他們不應該從一個Tk的widget類派生。

+0

正如你指出我已經改變了依賴父母和自己在Cuadro與應用類, 和應用類中添加的init框架 現在它顯示的三個Cuadro的,但不會調整其大小,也不接受背景顏色 我該怎麼繼續做錯誤或什麼我缺乏 T和這是新的結果:?! HTTP://imgur.com/QfoF7cQ 時調整其大小: !HTTP://imgur.com/8FavoIL 對不起我不知道如何添加新的代碼:-( – Chemag

+0

我想我已經找到了解決辦法,下面你的想法,插入。 'tk.Grid.rowconfigure(根,0,重量= 1) tk.Grid.columnconfigure(根,0,重量= 1)' 後 '根= tk.Tk()' – Chemag

+0

這是一個寫它的奇怪方式,應該簡單地是'root.rowconfigure(0,weight = 1)'。 – jasonharper

相關問題