2012-08-16 29 views
5

Tôi đã tạo Khung và sau đó là Canvas.
Điều tôi muốn làm tiếp theo là thêm Nút trên Canvas.
Tuy nhiên, khi tôi đóng Gói, tôi không thể thấy Canvas!Làm cách nào để bạn tạo một Nút trên Canvas tkinter?

Đây là những gì tôi đã cố gắng:

from Tkinter import Tk, Canvas, Frame, Button 
from Tkinter import BOTH, W, NW, SUNKEN, TOP, X, FLAT, LEFT 

class Example(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent 
     self.initUI() 

    def initUI(self): 
     self.parent.title("Layout Test") 
     self.config(bg = '#F0F0F0') 
     self.pack(fill = BOTH, expand = 1) 
       #create canvas 
     canvas1 = Canvas(self, relief = FLAT, background = "#D2D2D2", 
              width = 180, height = 500) 
     canvas1.pack(side = TOP, anchor = NW, padx = 10, pady = 10) 
     #add quit button 
     button1 = Button(canvas1, text = "Quit", command = self.quit, 
                  anchor = W) 
     button1.configure(width = 10, activebackground = "#33B5E5", 
                 relief = FLAT) 
     button1.pack(side = TOP) 

def main(): 
    root = Tk() 
    root.geometry('800x600+10+50') 
    app = Example(root) 
    app.mainloop() 

if __name__ == '__main__': 
    main() 

Trả lời

11

Các Tkinter pack quản lý cố gắng để thay đổi kích thước widget mẹ cho đúng kích thước để chứa con widget của nó, và không lớn, theo mặc định. Vì vậy, canvas ở đó - nhưng nó chính xác kích thước giống như nút, và do đó vô hình.

Nếu bạn muốn đặt một widget trên một canvas mà không gây ra vải để tự động thay đổi kích thước, bạn muốn Canvas.create_window() chức năng:

# ... snip ... 
button1 = Button(self, text = "Quit", command = self.quit, anchor = W) 
button1.configure(width = 10, activebackground = "#33B5E5", relief = FLAT) 
button1_window = canvas1.create_window(10, 10, anchor=NW, window=button1) 

này sẽ tạo nút bấm của bạn với góc trên bên trái tại (10, 10) tương đối vào canvas, không thay đổi kích thước khung hình.

Lưu ý rằng bạn có thể thay thế đối số window bằng tham chiếu đến bất kỳ tiện ích Tkinter nào khác. Tuy nhiên, một lời nhắc nhở: tiện ích con được đặt tên phải là con của cửa sổ cấp cao nhất có chứa canvas hoặc con của một số tiện ích nằm trong cùng một cửa sổ cấp cao nhất.

+0

Cảm ơn, điều đó rất hữu ích! – Tony