2009-11-21 49 views
8

Có cách nào để bỏ chọn tất cả các nút radio trong một nhóm với PyGTK không? Không có nút radio nào được kiểm tra khi khởi động, vì vậy tôi nghĩ rằng phải có cách để trả về tất cả trạng thái không được kiểm soát đó.Có cách nào để bỏ chọn tất cả các nút radio trong một nhóm không? (PyGTK)

+0

Không được kiểm tra khi khởi động? Tôi chưa bao giờ thấy chúng. –

Trả lời

3

Không nên có. Theo bản chất của họ, một nhóm nút radio là 'chọn một trong nhiều' loại điều khiển. Từ quan điểm của con người, ý tưởng là một trong số chúng luôn được chọn. Khung thực sự cần thực thi điều đó, vì vậy thực sự không nên là trạng thái 'không được chọn' cho nhóm. Trạng thái không được chọn của nhóm nút radio (trong các khung nơi có thể) rất khó hiểu đối với người dùng, bởi vì đó không phải là trạng thái mà họ có thể kiểm soát được.

Nếu bạn muốn trạng thái 'không được chọn', tôi muốn nói bạn nên thêm phần tử 'none' vào nhóm, HOẶC đã chọn loại điều khiển khác phù hợp với loại điều bạn muốn thực hiện.

+2

Cảm ơn. Tôi đã thêm nút radio "Không". :) – linkmaster03

+3

Hoàn toàn không đồng ý. Hãy tưởng tượng một tình huống mà nhóm radio bị vô hiệu hóa bởi sự tương tác với một widget khác. Không có mục nào xuất hiện được chọn. Bản thân GTK sẽ không buộc bạn phải hành xử theo một số quy tắc tưởng tượng. –

+1

@Ali A: Bạn vẫn không nên ép buộc không chọn lựa. Nhóm nên trở nên khác biệt về mặt thị giác (màu xám trên hầu hết các hệ thống) như một dấu hiệu cho thấy nó không thể tương tác được với nhau. Trong giao diện người dùng tốt, lựa chọn trước vẫn nên có mặt, bởi vì nếu bạn hoàn nguyên cài đặt của điều khiển khác, các nút radio sẽ quay trở lại những gì chúng đã có trước khi bạn chạm vào điều khiển khác. –

1

Nhìn nó trong mã nguồn và set_active chỉ đơn giản là mô phỏng một nhấp chuột vào nút nếu trạng thái mới khác với trạng thái cũ. Mã nút radio sau đó kiểm tra xem có nút radio nào khác trong nhóm đang hoạt động không và nếu không, nó sẽ từ chối thay đổi khi bạn nhận thấy.

Từ nút radio đầu tiên sẽ luôn được đặt thành hoạt động khi bạn tạo nhóm (như mong đợi). Nếu nó không hiển thị nó có khả năng là một lỗi, nó sẽ được quan tâm để xem nếu radio_button.get_activeTrue cho nút đầu tiên bạn tạo ra (ngay cả khi nó không hiển thị trong giao diện người dùng).

Tôi đồng ý với Michael Kohne mặc dù bạn nên xem xét một yếu tố giao diện người dùng khác nếu bạn muốn làm cho tất cả các nút radio không được chọn.

+0

Tôi đã cố gắng làm điều đó, nhưng nó sẽ tự động bật lại một trong các nút radio trong nhóm. – linkmaster03

+0

Cập nhật câu trả lời sau khi xem xét triển khai. – hallski

+0

Cảm ơn bạn đã xác nhận từ mã! Kinda lạ rằng họ sẽ cung cấp cho chúng tôi một chức năng để 'set_active (false)' (trong 'gtkmm' parlance) nhưng không thực sự tôn vinh nó trong mọi trường hợp, nhưng oh tốt. –

6

Tôi đồng ý với Michael, nhưng đối với hồ sơ, điều này có thể được thực hiện.

Một cách để thực hiện việc này là có nút radio ẩn mà bạn có thể kích hoạt, sau đó sẽ khiến tất cả các nút hiển thị không hoạt động. Nhanh n 'Ví dụ về bẩn:

import gtk 

window = gtk.Window() 
window.set_default_size(200, 200) 

rb1 = gtk.RadioButton() 
rb2 = gtk.RadioButton() 
rb3 = gtk.RadioButton() 

rb2.set_group(rb1) 
rb3.set_group(rb2) 

rb3.set_active(True) 

hbox = gtk.HBox() 

hbox.add(rb1) 
hbox.add(rb2) 
hbox.add(rb3) 

button = gtk.Button("Click me") 
button.connect("clicked", lambda x: rb3.set_active(True)) 

hbox.add(button) 

window.add(hbox) 
window.show_all() 

rb3.hide() 

gtk.main() 
+0

Ít nhất là ở Máy tính của tôi, nó cũng hoạt động, nếu None-Element là phần tử đầu tiên trong nhóm và không được thêm vào bất kỳ ô nào. –

+0

Đã làm việc cho tôi, mặc dù tất cả những người naysayers. Trong giao diện đồ họa của tôi, tôi cần điều này cho các trường hợp RadioButton được khử độc và các giá trị cũ không có liên quan (đó là bước xác nhận không thể bỏ qua trước khi tải dữ liệu mới). –

1

Giải pháp của tôi, điều đáng chú ý là không có nút radio trong cùng một nhóm không hiển thị trên màn hình.

Trong chế độ Glade, bạn có thể 'thêm tiện ích con thành' trong menu ngữ cảnh của nút thêm tiện ích con. Trong mã tôi sẽ hình ảnh nó về cơ bản chỉ cần không thêm các widget cho bất kỳ gui hiển thị, hoặc cẩn thận không .show() nó (bao gồm .showall() trên một phụ huynh)

+0

Yup, tôi vừa thêm một RadioButton giả vào lớp chứa của tôi và chỉ đơn giản là không hiển thị nó ở bất cứ đâu. Trên desensitisation, nó được chọn, để tất cả các nút (có thể nhìn thấy) thực tế được bỏ chọn. –

Các vấn đề liên quan