Установить свойства виджета в PySide можно не только через соответствующие методы и конструктор класса. Можно их изменять с помощью метода setProperty по имени.
btn = QPushButton("Click Me")
btn.setProperty("flat", True)
Это аналогично вызову
btn.setFlat(True)
Если указать несуществующее свойство, то оно просто создается
btn.setProperty("btnType", "super")
Получить его значение можно методом .property(name)
btn_type = btn.property("btnType")
Когда это может быть полезно?
▫️Можно просто хранить какие то данные в виджете и потом их доставать обратно
widget = QWidget()
widget.setProperty('my_data', 123)
print(widget.property('my_data'))
▫️ Назначая эти свойства разным виджетам можно потом отличить виджеты во время итераци по ним. Например, найти все кнопки со свойством my_data="superbtn".
Но ведь вместо кастомного свойства можно использовать objectName, будет тот же результат.
Да, но y ObjectName есть ограничение - только строки.
▫️ Если нам потребуется не просто поиск а, например, сортировка по числу, то свойства позволяют нам это сделать. Поддерживается любой тип данных
widget.setProperty('my_data', {'Key': 'value'})
widget.setProperty('order', 1)
all_widgets.sort(key=w: w.property('order'))
Но ведь Python позволяет всё вышеперечисленное сделать простым созданием атрибута у объекта
widget.order = 1
widget.my_data = 123
Да, но я думаю что не надо объяснять почему не стоит так делать. К тому же, если у виджета нет свойства то метод .property(name) вернет None, а отсутствующий атрибут выбросит исключение.
▫️ Действительно полезное применение кастомным свойствам - контроль стилей. Здесь атрибутами не обойтись, нужны именно свойства.
Дело в том, что в селекторах стилей можно указывать конкретные свойства виджетов на которые следует назначать стиль.
Просто запустите этот код
from PySide2.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
widget = QWidget(minimumWidth=300)
layout = QVBoxLayout(widget)
btn1 = QPushButton("Action 1")
btn2 = QPushButton("Action 2")
btn3 = QPushButton("Action 3", flat=True)
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)
# добавим кастомное свойство одной кнопке
btn1.setProperty("btnType", "super")
# добавляем стили
widget.setStyleSheet(
"""
QPushButton[btnType="super"] {
background-color: yellow;
color: red;
}
QPushButton[flat="true"] {
color: yellow;
}
"""
)
widget.show()
app.exec_()
С помощью селектора мы избирательно назначили стили на конкретные кнопки.
Как получить список всех кастомный свойств?
Функция получения списка кастомных свойств отличается от получения дефолтных.
def print_widget_dyn_properties(widget):
for prop_name in widget.dynamicPropertyNames():
property_name = prop_name.data().decode()
property_value = widget.property(property_name)
print(f"{property_name}: {property_value}")
#tricks#qt
Beberapa Detail tentang Moderasi Telegram dari Investigasi eSafety
Telegram dikenal sangat tertutup terkait struktur dan proses internalnya. Namun, seiring pertumbuhan jumlah pengguna, tekanan pada perusahaan pun meningkat: regulator di berbagai negara menuntut transparansi lebih besar, terutama dalam hal keamanan pengguna.
Pada Maret 2024, regulator keamanan internet Australia, eSafety, memulai investigasi terhadap praktik moderasi Telegram. Editor @tginfo telah mempelajari dokumen yang diterbitkan, di mana aplikasi perpesanan ini mengungkap beberapa detail tentang operasi sistem yang memblokir konten ilegal kepada regulator.
Jika Anda tertarik memahami:
• Cara Telegram menyeimbangkan privasi dan keamanan
• Berapa banyak laporan yang diproses oleh moderator versus algoritme
• Cara kerja pemindaian konten otomatis
kami merekomendasikan untuk membaca analisis lengkap kami.
Artikel saat ini hanya tersedia dalam bahasa Inggris
Artikel: tginfo.me/esafety-analysis-en/
#antispam
Telegram Mungkin Memperkenalkan Akun 'Beku' untuk Pelanggar Aturan
Editor @tginfoid telah menemukan rangkaian baru dalam kode sumber Unigram, yang mengindikasikan bahwa aplikasi messenger tersebut akan segera memperkenalkan kemampuan untuk menempatkan akun pengguna ke dalam status "beku" dalam pembaruan mendatang.
Berdasarkan rangkaian ini, seseorang dapat berspekulasi:
• Akun dapat dibekukan karena melanggar Syarat dan Ketentuan Telegram.
• Saat dibekukan, pengguna “dapat mengakses akun mereka tetapi tidak dapat mengirim pesan atau melakukan tindakan apa pun”. Akun yang dibekukan akan beroperasi dalam “mode baca-saja”. Agaknya, pembatasan ini bahkan akan meluas ke pengiriman pesan pribadi dengan kontak.
• Telegram dapat menawarkan opsi kepada pengguna untuk mengajukan banding atas keputusan ini melalui @SpamBot. Jika pembekuan tidak dicabut, akun akan dihapus.
• Ada kemungkinan pengguna lain mungkin melihat indikator khusus pada profil akun yang dibekukan.
• Masih belum jelas apakah “pembekuan” akan digunakan untuk semua akun yang diblokir secara permanen sebelum dihapus.
Fitur ini masih dalam tahap pengembangan, dan informasi di atas merupakan asumsi dari editor @tginfoid. Rinciannya mungkin tidak akurat atau dapat berubah di kemudian hari.
#antispam
¿Que puede hacer este bot?
🤖@AntiSpam
📎Bot para eliminar spam en Telegram: chats, foros y comentarios
Basado en algoritmos únicos, el bot identifica automáticamente a los spammers, elimina sus mensajes y los incluye en la lista negra.
🔻 Funciona gratis
🔻 No requiere configuración
🔻 Encuentra y elimina todos los tipos populares de spam
#Administración#AntiSPAM
( Visto en: @BotsGram_Cu )
Telegram Mungkin Mulai Menggunakan CAPTCHA
Perubahan dalam kode sumber TDLib menunjukkan bahwa aplikasi perpesanan ini mungkin mulai menggunakan CAPTCHA — sebuah verifikasi "Saya bukan robot" untuk beberapa tindakan tertentu. Menurut kode tersebut, verifikasi ini hanya akan diterapkan di aplikasi Telegram resmi.
Secara umum, CAPTCHA digunakan untuk melindungi dari spam dan permintaan yang tidak diinginkan lainnya. Sebelumnya, aplikasi perpesanan ini hanya bisa memblokir tindakan mencurigakan seperti itu.
Masih belum diketahui untuk tindakan apa dan seberapa sering verifikasi ini akan diminta. Ada kemungkinan Telegram akan menggunakan CAPTCHA tak terlihat, yang akan mengumpulkan data di latar belakang dan memberikan skor bot kepada Telegram saat dibutuhkan.
Menurut editor @tginfo, CAPTCHA dapat mengurangi jumlah kesalahan dan pembatasan (floodwaits) yang dialami oleh sebagian pengguna. Namun, jika hal ini justru menyebabkan lebih banyak penyalahgunaan, aplikasi perpesanan ini mungkin akan memperketat sistemnya, dan dalam kasus itu, CAPTCHA akan menjadi tambahan yang mengganggu. Jika Telegram menggunakan CAPTCHA tak terlihat, pengguna tidak akan memiliki cara lain untuk mengatasi masalah ketika aktivitas mereka dianggap mencurigakan.
Kode sumber menyebutkan bahwa reCAPTCHA adalah solusi verifikasi pengguna dari Google. Kemungkinan besar, inilah teknologi yang akan digunakan oleh aplikasi perpesanan tersebut. Hal ini menimbulkan beberapa pertanyaan tentang privasi, karena reCAPTCHA menggunakan pengumpulan data yang luas untuk mendeteksi bot. Fitur ini masih dalam pengembangan, dan tim Telegram dapat memodifikasi atau membatalkannya.
#tdlib#antispam
@littleGuardianBot
Qué puede hacer este bot?
LittleGuardian fue creado como un bot para apoyar los esfuerzos de los administradores del grupo Telegram mientras luchaba con comportamientos antisociales y varios ataques contra los grupos o miembros del grupo.
Idioma: Inglés
(visto en @BotsGram_cu)
#antispam, #protection, #management, #groups, #filter, #welcome
@ChatKeeperBot
Qué puede hacer este bot?
Este bot brinda un servicio internacional de analítica, estadística y moderación para grupos de telegram
(visto en @BotsGram_cu)
#analítica, #antispam, #spam, #reputación, #captcha, #saludos, #bienvenida, #administración, #moderación, #grupos
@BanInfoRobot
Qué puede hacer este bot?
Comprueba si estás prohibido en los populares servicios Anti-Spam de Telegram como SpamWatch, CAS, etc
Idioma: Inglés
(visto en @BotsGram_cu)
#ban, #userinfo, #spamwatch, #cas, #combot, #spam, #antispam, #spamprotection, #spb, #antispaminc, #check, #api, #scam, #spammer