Python'da flet kütüphanesinde sınıf içerisinden diyalog gösterme

Katılım
27 Nisan 2022
Mesajlar
2.064
Çözümler
17
Kodum bu. Şimdi benim yapmak istediğim Info butona tıkladığımızda tam olarak buradakilerin olması.
Yani open_dlg fonksiyonunun maindeki page a erişmesi lazım. Anlayanlar varsa yardımcı olabilirmi?


Python:
import flet
from flet import Page, UserControl, Column, Container, colors, border_radius, padding, Text, Row, ElevatedButton, icons, \
    IconButton, Dropdown, dropdown, FontWeight, AlertDialog


def inf_on_click(page: Page):
    pass


class App(UserControl):
    def __init__(self, style):
        super().__init__()
        self.style = style

    def build(self):
        return Column(
            controls=[
                Container(
                    bgcolor=self.style["bg-color"],
                    width=450,
                    height=550,
                    border_radius=self.style["border-radius"],

                    content=(
                        Column(
                            alignment=flet.MainAxisAlignment.CENTER,
                            horizontal_alignment=flet.CrossAxisAlignment.CENTER,
                            controls=[
                                Container(
                                    width=430,
                                    height=530,

                                    content=(
                                        Column(

                                            controls=[

                                                Row(

                                                    expand=True,
                                                    alignment=flet.MainAxisAlignment.CENTER,
                                                    vertical_alignment=flet.CrossAxisAlignment.START,

                                                    controls=[
                                                        Column(
                                                            expand=True,
                                                            alignment=flet.MainAxisAlignment.START,
                                                            horizontal_alignment=flet.CrossAxisAlignment.START,
                                                            controls=[
                                                                IconButton(
                                                                    icon=icons.INFO,
                                                                    scale=0.8,

                                                                )
                                                            ]
                                                        ),
                                                        Column(
                                                            expand=True,
                                                            width=175,
                                                            alignment=flet.MainAxisAlignment.START,
                                                            horizontal_alignment=flet.CrossAxisAlignment.CENTER,
                                                            controls=[
                                                                Text("Hello!",
                                                                     size=25,

                                                                     )
                                                            ]

                                                        ),
                                                        Column(
                                                            expand=True
                                                        ),

                                                    ]
                                                ),
                                                Row(
                                                    expand=True,
                                                    alignment=flet.MainAxisAlignment.CENTER,
                                                    controls=[
                                                        ElevatedButton(
                                                            text="Start Installation",
                                                            icon=icons.ARROW_RIGHT,
                                                            color=self.style["text-color"],
                                                            scale=1.2
                                                        )
                                                    ]
                                                ),
                                                Row(
                                                    expand=True,
                                                    alignment=flet.MainAxisAlignment.CENTER,
                                                    vertical_alignment=flet.CrossAxisAlignment.START,
                                                    controls=[
                                                        Column(
                                                            expand=True,
                                                            alignment=flet.MainAxisAlignment.END,
                                                            horizontal_alignment=flet.CrossAxisAlignment.START,
                                                            controls=[
                                                                IconButton(
                                                                    icon=icons.POWER_SETTINGS_NEW,
                                                                    scale=1.3,
                                                                    tooltip="Shutdown",

                                                                )
                                                            ]
                                                        ),
                                                        Column(
                                                            width=175,

                                                            alignment=flet.MainAxisAlignment.END,
                                                            horizontal_alignment=flet.CrossAxisAlignment.CENTER,
                                                            controls=[
                                                                Dropdown(
                                                                    width=200,
                                                                    height=45,

                                                                    tooltip="Select Language",
                                                                    hint_text="Select Language",
                                                                    hint_style=flet.TextStyle(size=15),

                                                                    options=[
                                                                        dropdown.Option("English")
                                                                    ]
                                                                )

                                                            ]
                                                        ),
                                                        Column(expand=True,
                                                               alignment=flet.MainAxisAlignment.END,
                                                               horizontal_alignment=flet.CrossAxisAlignment.END,
                                                               controls=[
                                                                   IconButton(
                                                                       icon=icons.ARROW_RIGHT_ALT,
                                                                       tooltip="Use arch in archiso enviroment(Live CD)",
                                                                       scale=1.3
                                                                   )
                                                               ]
                                                               ),

                                                    ]
                                                )
                                            ]
                                        )
                                    )
                                )
                            ]
                        )

                    )

                )
            ]

        )


def main(page: Page):
    page.title = "EasyArch Utily"
    page.window_height = 600
    page.window_width = 500
    dlg = AlertDialog(
        title=Text("Hello, you!")
    )

    style = {
        "text-color": colors.WHITE,
        "secondary-bg-color": colors.WHITE60,
        "bg-color": colors.BLACK12,
        "border-radius": 8
    }
    app = App(style)
    page.add(app)
    page.vertical_alignment = "center"
    page.horizontal_alignment = "center"

    page.update()


flet.app(main)

Ve evet bir arch linux kurulum aracı yazıyorum. Temel fonksiyonlar tamam. Sadece ui kaldı.
 


Python:
import flet
from flet import Page, UserControl, Column, Container, colors, border_radius, padding, Text, Row, ElevatedButton, icons, \
    IconButton, Dropdown, dropdown, FontWeight, AlertDialog



uyari = flet.AlertDialog(
        title=flet.Text("Oldu gibi"), on_dismiss=lambda e: print("Dialog dismissed!")
    )
       

def inf_on_click(_: flet.ControlEvent):
    page = _.control.data# istediğin sayfa
    page.dialog = uyari
    uyari.open = True
    page.update()
   
   


class App(UserControl):
    def __init__(self, style):
        super().__init__()
        self.style = style

    def build(self):
        return Column(
            controls=[
                Container(
                    bgcolor=self.style["bg-color"],
                    width=450,
                    height=550,
                    border_radius=self.style["border-radius"],

                    content=(
                        Column(
                            alignment=flet.MainAxisAlignment.CENTER,
                            horizontal_alignment=flet.CrossAxisAlignment.CENTER,
                            controls=[
                                Container(
                                    width=430,
                                    height=530,

                                    content=(
                                        Column(

                                            controls=[

                                                Row(

                                                    expand=True,
                                                    alignment=flet.MainAxisAlignment.CENTER,
                                                    vertical_alignment=flet.CrossAxisAlignment.START,

                                                    controls=[
                                                        Column(
                                                            expand=True,
                                                            alignment=flet.MainAxisAlignment.START,
                                                            horizontal_alignment=flet.CrossAxisAlignment.START,
                                                            controls=[
                                                                IconButton(
                                                                    icon=icons.INFO,
                                                                    scale=0.8,
                                                                    on_click=inf_on_click,
                                                                    data=self.page,
                                                                )
                                                            ]
                                                        ),
                                                        Column(
                                                            expand=True,
                                                            width=175,
                                                            alignment=flet.MainAxisAlignment.START,
                                                            horizontal_alignment=flet.CrossAxisAlignment.CENTER,
                                                            controls=[
                                                                Text("Hello!",
                                                                     size=25,

                                                                     )
                                                            ]

                                                        ),
                                                        Column(
                                                            expand=True
                                                        ),

                                                    ]
                                                ),
                                                Row(
                                                    expand=True,
                                                    alignment=flet.MainAxisAlignment.CENTER,
                                                    controls=[
                                                        ElevatedButton(
                                                            text="Start Installation",
                                                            icon=icons.ARROW_RIGHT,
                                                            color=self.style["text-color"],
                                                            scale=1.2
                                                        )
                                                    ]
                                                ),
                                                Row(
                                                    expand=True,
                                                    alignment=flet.MainAxisAlignment.CENTER,
                                                    vertical_alignment=flet.CrossAxisAlignment.START,
                                                    controls=[
                                                        Column(
                                                            expand=True,
                                                            alignment=flet.MainAxisAlignment.END,
                                                            horizontal_alignment=flet.CrossAxisAlignment.START,
                                                            controls=[
                                                                IconButton(
                                                                    icon=icons.POWER_SETTINGS_NEW,
                                                                    scale=1.3,
                                                                    tooltip="Shutdown",

                                                                )
                                                            ]
                                                        ),
                                                        Column(
                                                            width=175,

                                                            alignment=flet.MainAxisAlignment.END,
                                                            horizontal_alignment=flet.CrossAxisAlignment.CENTER,
                                                            controls=[
                                                                Dropdown(
                                                                    width=200,
                                                                    height=45,

                                                                    tooltip="Select Language",
                                                                    hint_text="Select Language",
                                                                    hint_style=flet.TextStyle(size=15),

                                                                    options=[
                                                                        dropdown.Option("English")
                                                                    ]
                                                                )

                                                            ]
                                                        ),
                                                        Column(expand=True,
                                                               alignment=flet.MainAxisAlignment.END,
                                                               horizontal_alignment=flet.CrossAxisAlignment.END,
                                                               controls=[
                                                                   IconButton(
                                                                       icon=icons.ARROW_RIGHT_ALT,
                                                                       tooltip="Use arch in archiso enviroment(Live CD)",
                                                                       scale=1.3
                                                                   )
                                                               ]
                                                               ),

                                                    ]
                                                )
                                            ]
                                        )
                                    )
                                )
                            ]
                        )

                    )

                )
            ]

        )


def main(page: Page):
    page.title = "EasyArch Utily"
    page.window_height = 600
    page.window_width = 500
    dlg = AlertDialog(
        title=Text("Hello, you!")
    )

    style = {
        "text-color": colors.WHITE,
        "secondary-bg-color": colors.WHITE60,
        "bg-color": colors.BLACK12,
        "border-radius": 8
    }
    app = App(style)
    page.add(app)
    page.vertical_alignment = "center" # type: ignore
    page.horizontal_alignment = "center" # type: ignore

    page.update()


flet.app(main)

Umarım yardımcı olur.
Bir butona data ögesi eklersen fonksiyon ona ulaşabilir.
Bu tarz bir sorun bende de ihtiyaç olmuştu.
İyi günler.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…