Установить свойства виджета в 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
@elzodxon’dan share qildim:
Kamron'ni 3-4 yildan beri taniyman, Ilyos aka yozganlariday, O'zbekistonda xizmat ko'rsatgan dasturchi;
Yaratayotgan kursi sifati va ma'lumot yetkazib berishi top! Vue.js Uzbek community'da bunday kurs yo'q, hozircha.
https://t.me/kamrondev/60
P.S. Kamron kanalimdan borganlarga chegirma bormi, kurslarga?) Xazillashib yozdim, kurs anchagina arzon! Ishoning!
#vuejs#tavsiya
#bepul#vuejs
⚡️Vue JS: To‘liq kurs – Noldan boshlab!
Vue 3-ni o‘rganmoqchimisiz? Ushbu bepul video kurs sizga Vue.js frameworkini mukammal o‘zlashtirishga yordam beradi!
📌Kursda nimalarni o‘rganasiz?
— Vue 3 asoslari
— Ma’lumotlar bilan ishlash
— Komponentlar yaratish va ulardan foydalanish
— Server bilan o‘zaro ishlash (API)
— Ramkani kengaytirish va optimallashtirish
— Loyihani serverga joylash
💻Kimlar uchun?
Kurs JavaScript bilan ishlash tajribasiga ega va front-end bilimlarini chuqurlashtirishni istagan dasturchilar uchun mo‘ljallangan.
📱Videoni tomosha qiling
Vue.js’ni o‘rganib, o‘z loyihalaringizni yaratishni boshlang! 🔥
💻@dasturlash_hayoti — bir xatoni tuzatib, ikkinchisiga tayyorlanish! 😅
#vuejs#frontend#dasturlash_hayoti
💚Vue.js’da v-if va v-show orasidagi farq
Vue’da elementlarni ko‘rsatish yoki yashirishda ikkita direktiva bor: v-if va v-show. Ular bir xil vazifani bajaradi, lekin ishlash usuli boshqacha
v-if
— Element faqat shart rost bo‘lsa DOM’da paydo bo‘ladi.
— Shart yolg‘on bo‘lsa, element DOM’dan butunlay olib tashlanadi.
— DOM qayta yaratilgani uchun ishlashi sekinroq.
Misol:
<button v-if="isAdmin">
Admin panelga kirish
</button>
✅isAdmin = true → tugma DOM’da yaratiladi.
❌isAdmin = false → tugma DOM’da umuman yo‘q bo‘ladi.
🟩🟩🟩🟩🟩🟩🟩🟩
v-show
— Element har doim DOM’da mavjud.
— Faqatgina CSS (display: none) orqali yashiriladi yoki ko‘rsatiladi.
— Tez ishlaydi, chunki DOM qayta yaratilmaydi.
Misol:
<button v-show="isLoggedIn">
Profilga kirish
</button>
✅isLoggedIn = true → tugma ko‘rinadi.
❌isLoggedIn = false → tugma DOM’da bor, lekin ko‘rinmaydi.
🟩🟩🟩🟩🟩🟩🟩🟩
💡 Xulosa:
◾️Agar element kamdan-kam ko‘rinadigan bo‘lsa → v-if
◾️Agar element tez-tez ko‘rinib-yashiriladigan bo‘lsa → v-show
💻@dasturlash_hayoti— Dasturchilar uchun eng kerakli maslahatlar va foydali kontent
#Vuejs#JavaScript#Frontend#DasturlashHayoti
💚Vue.js o‘rganish uchun JavaScriptni qay darajada bilish kerak?
Ko‘pchilik Vue.js’ni o‘rganmoqchi bo‘ladi, lekin savol tug‘iladi:
“Bunga kirishishdan oldin JavaScriptni qanchalik bilishim kerak?”
Aslida Vue.js — bu JavaScript asosida ishlaydigan frontend framework.
Shuning uchun quyidagi narsalarni bilish shart 👇
Asosiy JavaScript bilimlari:
➡️ O‘zgaruvchilar (let, const)
➡️ Shart operatorlari (if, else)
➡️ Funksiyalar va massivlar
➡️ DOM bilan ishlash (elementlarni olish, o‘zgartirish)
O‘rta daraja bilimlar:
➡️ Arrow functions
➡️map(), filter(), forEach() kabi metodlar
➡️ Object va Array destrukturatsiyasi
➡️this tushunchasi
➡️import / export modullari
Vue.js — bu JavaScriptni soddaroq va qulayroq yozish imkonini beradigan vosita.
Ya’ni, JavaScript bilmasdan Vue.js’da uzoqqa bora olmaysiz 😅
💻@dasturlash_hayoti— Dasturchilar hayoti, motivatsiya va IT olamidagi eng foydali maslahatlar shu yerda!
#vuejs#frontend#dasturlash#web
💚Vue.js da har kuni kerak bo'ladigan 5 ta TOP funksiya
Vue.js (Composition API) da loyiha qilyapsizmi? Unda shu 5 ta funksiya sizning eng asosiy qurolingiz bo'ladi. Qisqa va lo'nda tushuntiramiz: 👇
1️⃣ref() va reactive() — Reaktivlik yuragi
O'zgaruvchilarni "jonli" qiladi. Oddiy qiymatlar (son, matn) uchun ref(), obyekt va massivlar uchun reactive() ishlatiladi. Qiymat o'zgarsa, ekrandagi ma'lumot ham darhol o'zgaradi!
2️⃣computed()— Aqlli hisob-kitob
Boshqa ma'lumotlarga qarab yangi qiymat yasaydi. Uning ajoyib tarafi — natijani saqlab qoladi va faqat kerakli vaqtdagina qayta hisoblaydi. Bu dastur tezligini oshiradi.
3️⃣watch()— Sadoqatli qorovul
Biror o'zgaruvchini poylab turadi. Masalan, foydalanuvchi qidiruvga so'z yozishi bilan backendga so'rov yuborish kerak bo'lsa, watch eng to'g'ri tanlov.
4️⃣onMounted()— To'g'ri vaqtda harakat
Komponent brauzerda to'liq paydo bo'lgach ishga tushadi. Odatda, API dan ma'lumotlarni tortib kelish (fetch) uchun eng ideal joy hisoblanadi.
5️⃣provide() va inject()— Pochtalon📬
Ma'lumotlarni eng tepadagi komponentdan eng pastdagisiga props orqali qiynalib o'tkazgandan ko'ra, shu ikkisi yordamida to'g'ridan-to'g'ri va toza yetkazib berish mumkin.
Siz eng ko'p qaysi biridan foydalanasiz? Izohlarda yozib qoldiring! 👇
💻@dasturlash_hayoti— dasturchilar hayoti va IT memlari aralash kanal😉
#typescript#component_library#element_plus#element_ui#vue#vue_components#vuejs
Element Plus is a UI library for Vue 3, built with TypeScript and the Composition API. It offers a variety of customizable components and a cool design language, making it easy for developers and designers to create user interfaces. The library is open-source and actively maintained, with tools like a migration tool to help transition from Element UI. This makes it a great choice for building modern web applications with a consistent look and feel.
https://github.com/element-plus/element-plus
Axios bilan real API chaqirish — ODDIY MISOL BILAN!
❓ “Ma’lumotni boshqa sayt yoki serverdan qanday olib kelamiz?” degan savol bormi? Javob: Axios!
STEP 1: Axios’ni o‘rnatamiz
Terminalda yozing:
npm install axios
STEP 2: Real API chaqiramiz (masalan: foydalanuvchilar ro‘yxati)
Bu API — jsonplaceholder.typicode.com saytiga tegishli va real ishda sinab ko‘rish uchun yaratilgan bepul servis.
import axios from 'axios';
export default {
data() {
return {
users: []
};
},
mounted() {
axios.get('https://jsonplaceholder.typicode.com/users')
.then(response => {
this.users = response.data;
})
.catch(error => {
console.log("Xatolik:", error);
});
}
}
STEP 3: Ma’lumotni sahifada chiqaramiz
<ul>
<li v-for="user in users" :key="user.id">
{{ user.name }} - {{ user.email }}
</li>
</ul>
📌 Natija:
✅ Sahifa ochilishi bilan API’dan foydalanuvchilar ro‘yxati olinadi
✅ Bu ma’lumotlar users array’iga joylanadi
✅ v-for yordamida ekranga chiqariladi
💡 Real hayotda bu qanday foyda beradi?
– Mahsulotlar ro‘yxati olish
– Ob-havo, yangiliklar, valyuta kurslari chiqarish
– Login/ro‘yxatdan o‘tish so‘rovlari
– Barcha dinamik ma’lumotlar API orqali ishlaydi!
Foydali deb bilsangiz:
📌Saqlab qo‘ying
📤 Do‘stlaringizga ulashing
💬Izohda fikringizni yozing
#vuejs#axios#api#frontend#json#dasturlash#webdev#praktika#ulashishga_arziydi
💻@dasturlash_hayoti — bir xatoni tuzatib, ikkinchisiga tayyorlanish! 😅
#typescript#accounting#book_keeping#desktop#double_entry_accounting#electron#frappe#inventory_management#invoicing#javascript#offline#open_source#point_of_sale#vuejs
Frappe Books is a free, open-source accounting software designed to make managing your business finances simple and efficient. It works on Windows, Mac, and Linux, and you can use it offline since it stores data locally on your computer. It offers easy invoicing with customizable templates, tracks payments, and provides important financial reports like profit and loss, balance sheets, and trial balances. The software has a clean, user-friendly interface and features like a dashboard for quick financial insights and a point-of-sale system for retail. This helps you save time, stay organized, and make smarter business decisions without complex tools or extra costs[1][3][4].
https://github.com/frappe/books