2010-10-25 40 views
8

Có thể định cấu hình tiện ích tkinter hoặc ttk (Nhãn, Mục nhập, Văn bản) với nền trong suốt để chúng có thể được đặt trong vùng chứa có tùy chỉnh không màu nền hoặc trên đầu trang của đồ họa hoặc hình ảnh canvas?Python 2.7/Windows: tiện ích tkinter/ttk với nền trong suốt, màu nền khung ttk

Tôi cũng đang tìm cách thay đổi màu nền của tiện ích con Khung ttk?

Tôi có cần phải sử dụng các đối tượng Kiểu ttk mới để thực hiện điều này không? (Tôi mới đến tkinter/ttk và vẫn cố gắng để có được đầu của tôi xung quanh cách thích hợp để làm việc).

Trả lời

3

Ngoại trừ trên OSX, bạn không thể làm gì vì tất cả các tiện ích này được vẽ trên cửa sổ thực là hình chữ nhật (trừ khi bạn sử dụng một số thủ thuật cấp thấp để cắt lỗ ra khỏi cửa sổ); phương pháp tiếp cận tôi khuyên bạn nên mặc dù tôi đã có mã - cho Tcl/Tk, không Python/Tkinter thừa nhận - mà hiện nó). OSX là ngoại lệ vì có các widget (chủ yếu) không được vẽ trên các cửa sổ thực, mà là sử dụng một hệ thống có trọng lượng nhẹ hơn (vì đó là cách OSX hoạt động).

Bạn có thể điều chỉnh các tiện ích có đường viền ít hơn bình thường, điều này là OK nếu bạn đang sử dụng kiểu giữ cho chúng về cơ bản vuông. Hoặc nếu bạn đang sử dụng canvas cho bề mặt "thú vị" của mình, bạn có thể tạo các thứ giống như nút trên canvas, điều này cũng có thể tốt hơn cho những gì bạn đang thực sự làm.

Để thay đổi màu nền của khung Ttk, bạn sẽ phải áp dụng kiểu cho nó. Các hướng dẫn tốt nhất về sáng tạo kiểu mà tôi đã thấy cho đến thời điểm này là ở số tkdocs style tutorial, là nơi mà Tôi chuyển sang khi tôi muốn tìm cách thực hiện những việc này. (Có, tài liệu Ttk nên tự trang trải nó, nhưng chưa được.)

+0

Câu trả lời ("không thể làm được") có thể đúng, nhưng lý do cơ bản (cửa sổ chữ nhật) thì không. Bất kể hình dạng của cửa sổ, màu nền trước và nền sau nên về nguyên tắc, hỗ trợ tính minh bạch. Nếu tiện ích Label hỗ trợ màu nền trong suốt (chuỗi rỗng ""), bạn có thể viết kiểu đã sử dụng màu đó cho mọi thứ nhưng nền trước văn bản và hình dạng của các phần tử trong suốt sẽ không thành vấn đề. – Dave

+0

@Dave: Tiêu chuẩn X11 không hỗ trợ độ trong suốt về màu sắc, bất kể bạn nghĩ nó “nên” bao nhiêu (nhưng về mặt lý thuyết có thể làm điều đó cho các bề mặt cụ thể thông qua sử dụng OpenGL). Với Windows, một cái gì đó có thể được thực hiện với 'UpdateLayeredWindow' nhưng không ai thực sự đóng góp mã để làm điều đó. –