Minimal Rio Intro – DEV Community

در اوایل نوامبر، اعلامیه انتشار ریو (https://rio.dev)، یک کتابخانه آینده پایتون برای ایجاد رابط های کاربری را دیدم. من سالها تجربه استفاده از Qt با پایتون را دارم و همیشه علاقه مند به دیدن رویکردهای جدید هستم.
من از طریق تیک تاک پا آموزش و چیزهای زیادی پیدا کردم که دوست داشتم. من در ابتدا تحت تاثیر سادگی نوشتن رابط ها با استفاده از کلاس های کامپوننت قرار گرفتم. رابط از طریق یک سند HTML اجرا می شود که به طور کامل توسط کتابخانه کپسوله شده است. این به شما امکان می دهد برنامه های Rio چگونه و کجا اجرا شوند. Rio به صورت اختیاری شامل یک برنامه نمایش وب مستقل است. با این حال، من به شدت از آن متنفرم rio
ابزار خط فرمان و ساختار اولیه پروژه که ایجاد می کند.
من فکر میکنم ریو سزاوار یک آموزش سبکتر است که صفحه دیگ و انتزاعها را از بین ببرد تا پتانسیل این کتابخانه را نشان دهد. بیایید از هیچ شروع کنیم و کشف کنیم که ریو چه احساسی در ساختن آن برای خودمان دارد. فهمیدم شروع کردم uv
به همان سادگی که انتظار داشتم
uv init minirio --no-readme --no-pin-python --vcs none
cd minirio
uv add rio-ui[window]
اختیاری
[window]
ویژگی بسیاری از وابستگی های مورد نیاز برای اجرای برنامه مستقل را نصب می کند. همچنین توجه داشته باشید که من باید استفاده کنم==9.3
در ویندوز به دلیل از دست رفتن بیلدهای pyside.
بیایید از حداقل کد مورد نیاز برای ساخت این برنامه استفاده کنیم.
import rio
class Greeting(rio.Component):
name: str = 'World'
def build(self):
return rio.Row(
rio.Icon('material/star', align_x=0.8, align_y=0.5),
rio.Markdown(f'Hello, **{self.name}**', align_y=0.5),
)
if __name__ == '__main__':
app = rio.App(build=Greeting)
app.run_in_window()
این یک اسکریپت معمولی پایتون است. آن را با مفسر پایتون خود اجرا کنید.
uv run hello.py
یک جزء کمی بیشتر از a است build
متدی که یک جزء و یک حالت تعریف شده روی کلاس را برمی گرداند. شما تعریف نمی کنید __init__
یا دیگر دیگ های معمولی. می توانید جایگزین کنید run_in_window
با یک run_as_web_server
و با این اپلیکیشن در مرورگر خود تعامل داشته باشید.
افزودن تعاملی بسیار کم نیاز دارد. در اینجا یک مؤلفه مشابه وجود دارد که یک چک باکس و یک ظاهر طراحی را اضافه می کند.
gradient = rio.LinearGradientFill(
(rio.Color.RED, 0), (rio.Color.PINK, .3),
)
class Greeting2(rio.Component):
checked: bool = False
def build(self):
style = rio.TextStyle(fill=gradient) if self.checked else 'text'
return rio.Row(
rio.Checkbox(is_on=self.bind().checked),
rio.Text('Roses are red.', style=style),
)
این در حال استفاده است self.bind()
برای ایجاد یک اتصال دو طرفه بین وضعیت چک باکس و یک ویژگی. از طرف دیگر، اختصاص دادن چک باکس ساده است on_change
استدلال به هر روش و تغییر ویژگی های self
به دلخواه
نمونه ها و مستندات کامل تر را در وب سایت پروژه ریو بیابید. من شخصاً هنوز آماده ترک دنیای Qt و Pyside نیستم، اما همچنین فکر می کنم در ریو به اندازه کافی وجود دارد که بتوانم آن را زیر نظر داشته باشم.