İçinde çocukları kaldırmak istediğim bir QGroupBox
widget'ım var. Bunu nasıl yaparım? Hiçbir removeWidget
, removeChild
, removeItem
veya the docs içinde benzer bir şey bulamıyorum. Öğeleri yalnızca bir düzenden nasıl kaldıracağımı görebilirim, ancak görünüşe göre, onu gerçek pencere öğesiden kaldırmaz.pyqt: Bir widget nasıl kaldırılır?
cevap
Peki kullanıyor, bu işleri i kaldırmak istediğiniz widget'ı, widget.setParent(None)
arayın. Bir düzene eklemenin kapsayıcıya bir widget eklediğini, ancak bir düzenden kaldırmanın ... eğlenceli şeyler olmadığını seviyorum. Widget'ınızın bağımlı hiçbir çocuğun widget'lar varsa
Bir widget'ın bir paftaya koyup koymadığına ve bir ebeveyne sahip olup olmadığına dair bir widgetin yaratıldığını anlamanız gerekir. Bir düzen ekran üzerinde organize etmek için sadece sorumludur, widget'ları göstermek ve gizlemek için güvenilir ve hatta kullanılabilir bir yöntem değildir –
Bir widget eklemek veya kaldırmak için bir yol görmüyorum (herhangi bir eklenti/eklenti işlevi kaldırmak) düzenleri. Widget'ın bir düzenine eklenmesi, görüntülenmesini sağlar (aslında ne yapması, widget'ın üst öğesinin düzen için kapsayıcıya ayarlanmasını sağlar). Aynı widget'ı aynı düzenden kaldırmanın görüntülenmeyeceğini (yani, düzeni eklediğim gibi geri döndürdüğümü) beklerim. ama bunu yapmanın tek yolu, widget'ın ebeveyni hiçbir zaman simetrik olmayan None'a ayarlamak gibi görünüyor. – Claudiu
iyi, ebeveyin 'removeChild' yöntemini kullanabilirsiniz, ancak 'saklamak' daha iyidir –
Gerçekten widget'ını silmek istediğinizden emin misiniz? hide
yapamaz mı? IMHO kabul edilen yöntem, widget'ların görünmesi ve kullanıcının görünümünden kaybolması için show
/hide
'u kullanıyor.
alternatif QStackedWidget
yea; [buraya bakın] (http://stackoverflow.com/questions/5889705/pyqt-how-to-remove-elements-from-a-qvboxlayout/5890555#5890555). sanırım saklanmak da işe yarayabilir – Claudiu
@Claidiu: Eğer istediğin buysa, cevabın size çözüm getirdiğini düşünüyorum. –
@Eli: cevabın bana ne olduğunu anlatma burada soruyordu. – Claudiu
i kullanabilirsiniz düşünüyorum: Benim testlerde
layout.removeWidget(self.widget_name)
self.widget_name.deleteLater()
self.widget_name = None
o kadar sahip çocuk var bir widget olduğunda:
import sip
layout.removeWidget(self.widget_name)
sip.delete(self.widget_name)
self.widget_name = None
Eğer sınıf veya global düzeyde widget için bir değişken adınız yoksa, layout.takeAt (index) ile düzeni kaldırır ve QLayoutItem'den widget işaretçisini alabilir, bu işlevler QLayoutItem.widget() yöntemiyle döner. Bu durumda hiçbiri değişken ismine atamak zorunda değilsiniz çünkü işlevinizin dışında başvurulan.
Her iki yöntemi de deneyin ve sizin için neyin işe yaradığını görün (bellekleri bir kaç kez tekrarladıktan sonra sızdırmayın).
QGroupBox'tan widget'ı kaldırmak için _just_'ı veya widget'ı silmek mi istiyorsunuz? –
@Alex: hepsini tamamen sil – Claudiu