@@ -1835,55 +1835,297 @@ ui.run(native=True)
18351835
18361836### 3.10 其他常用控件(更新中)
18371837
1838- #### 3.10.1 ui.button_group
1838+ #### 3.10.1 ui.dropdown_button
18391839
1840- 按钮组,
1840+ 前面在介绍菜单控件的时候,是用按钮内嵌入菜单,实现点击按钮弹出菜单的效果。其实,在NiceGUI中,有个控件可以实现一步到位,无需嵌入,那就是ui.dropdown_button——下拉按钮。
18411841
1842+ 先看示例:
18421843
1844+ ``` python3
1845+ from nicegui import ui
1846+
1847+ with ui.dropdown_button(' Open me!' , auto_close = True , split = True ):
1848+ ui.item(' Item 1' , on_click = lambda : ui.notify(' You clicked item 1' ))
1849+ ui.item(' Item 2' , on_click = lambda : ui.notify(' You clicked item 2' ))
1850+
1851+ ui.run(native = True )
1852+ ```
1853+
1854+ ![ ui_dropdown_button] ( README_MORE.assets/ui_dropdown_button.png )
1855+
1856+ 可以看到,下拉按钮的弹出效果很像在按钮中嵌入了菜单,但需要的代码更少,结构也更清晰。当然,样式上因为多了一个下拉的三角,没法像嵌入菜单那样灵活,读者可以根据需求自主选择。
1857+
1858+ 下拉按钮支持以下参数:
1859+
1860+ ` text ` 参数,字符串类型,表示显示在按钮上的文字,和普通按钮一样。
1861+
1862+ ` value ` 参数,布尔类型,表示下拉按钮的初始状态是否为下拉内容弹出,默认为` False ` 。
1863+
1864+ ` on_value_change ` 参数,可调用类型,表示下拉按钮的value变化(即下拉内容弹出状态变化)时执行什么操作。
1865+
1866+ ` on_click ` 参数,可调用类型,表示点击下拉按钮主体(不是右边的小三角)时执行什么操作,和普通按钮一样。
1867+
1868+ ` color ` 参数,字符串类型或者None,表示按钮的颜色,支持传入字符串类型的颜色类(Quasar、 Tailwind、CSS的颜色名)或者` None ` (即让按钮变成默认颜色),默认为'primary',即和主题颜色一致。
1869+
1870+ ` icon ` 参数,字符串类型,表示按钮额外显示的图标,支持传入字符串类型的图标名,和普通按钮一样。
1871+
1872+ ` auto_close ` 参数,布尔类型,表示点击下拉内容之后是否自动关闭下拉内容的弹出,就和菜单项一样,默认为` False ` 。
1873+
1874+ ` split ` 参数,布尔类型,表示是否显示分隔符来区分按钮主体和下拉弹出响应区,默认为` False ` 。
1875+
1876+ 同样的,下拉按钮也可以嵌入其他控件,实现想要的效果:
1877+
1878+ ``` python3
1879+ from nicegui import ui
1880+
1881+ with ui.dropdown_button(' Settings' , icon = ' settings' , split = True ):
1882+ with ui.row().classes(' p-4 items-center' ):
1883+ ui.icon(' volume_up' , size = ' sm' )
1884+ ui.switch().props(' color=negative' )
1885+ ui.separator().props(' vertical' )
1886+ ui.icon(' mic' , size = ' sm' )
1887+ ui.switch().props(' color=negative' )
1888+
1889+ ui.run(native = True )
1890+ ```
1891+
1892+ ![ ui_dropdown_button2] ( README_MORE.assets/ui_dropdown_button2.png )
1893+
1894+ 想要修改下拉触发区的图标,可以参考[ API文档] ( https://quasar.dev/vue-components/button-dropdown#qbtndropdown-api ) ,修改'dropdown-icon'属性,
1895+
1896+ ``` python3
1897+ from nicegui import ui
1898+
1899+ with ui.dropdown_button(" Open me!" , auto_close = True , split = True ).props(
1900+ ' no-icon-animation dropdown-icon="menu"'
1901+ ):
1902+ ui.item(" Item 1" , on_click = lambda : ui.notify(" You clicked item 1" ))
1903+ ui.item(" Item 2" , on_click = lambda : ui.notify(" You clicked item 2" ))
1904+
1905+ ui.run(native = True )
1906+ ```
1907+
1908+ ![ ui_dropdown_button3] ( README_MORE.assets/ui_dropdown_button3.png )
1909+
1910+ #### 3.10.2 ui.button_group
1911+
1912+ 下拉按钮看起来就像两个按钮组合到一起,也可以用按钮组控件模拟实现,让右边的按钮支持更多功能:
1913+
1914+ ``` python3
1915+ from nicegui import ui
1916+
1917+ with ui.button_group():
1918+ ui.button(' menu' )
1919+ ui.separator().props(' vertical' )
1920+ ui.button(icon = ' menu' )
1921+
1922+ ui.run(native = True )
1923+ ```
1924+
1925+ ![ ui_button_group] ( README_MORE.assets/ui_button_group.png )
1926+
1927+ 下拉按钮也是按钮,一样可以和按钮组组合使用:
1928+
1929+ ``` python3
1930+ from nicegui import ui
1931+
1932+ with ui.button_group():
1933+ ui.button(' One' )
1934+ ui.button(' Two' )
1935+ with ui.dropdown_button(' Dropdown' ):
1936+ ui.item(' Item 1' , on_click = lambda : ui.notify(' Item 1' ))
1937+ ui.item(' Item 2' , on_click = lambda : ui.notify(' Item 2' ))
1938+
1939+ ui.run(native = True )
1940+ ```
1941+
1942+ ![ ui_button_group2] ( README_MORE.assets/ui_button_group2.png )
1943+
1944+ #### 3.10.3 ui.badge
1945+
1946+ 角标控件,可以在一个控件的上层显示简单的文字,就像手机图标上提示有多少消息未读的角标一样:
1947+
1948+ ``` python3
1949+ from nicegui import ui
1950+
1951+ with ui.button(' Button' ):
1952+ ui.badge(text = ' 99+' , color = ' red' ,text_color = ' black' ,outline = False ).props(' floating' )
1953+
1954+ ui.run(native = True )
1955+ ```
1956+
1957+ ![ ui_badge] ( README_MORE.assets/ui_badge.png )
1958+
1959+ 角标控件支持以下参数:
1960+
1961+ ` text ` 参数,字符串类型,显示在角标内的文字。
1962+
1963+ ` color ` 参数,字符串类型或者None,表示角标的颜色,支持传入字符串类型的颜色类(Quasar、 Tailwind、CSS的颜色名)或者` None ` (即让角标变成默认颜色),默认为'primary',即和主题颜色一致。
1964+
1965+ ` text_color ` 参数,字符串类型或者None,表示文字的颜色,支持传入字符串类型的颜色类(Quasar、 Tailwind、CSS的颜色名)或者` None ` (即让文字变成默认颜色)。
1966+
1967+ ` outline ` 参数,布尔类型,是否启用轮廓线风格,默认为` False ` 即填充风格。
1968+
1969+ 更多角标的设计属性可以参考[ API文档] ( https://quasar.dev/vue-components/badge#qbadge-api ) ,示例代码中的'floating'就是修改了设计属性,让角标显示在右上角。其他有用的属性有'rounded'、'transparent'、'label'等。
1970+
1971+ #### 3.10.4 ui.chip
1972+
1973+ 晶片控件,看上去有点像角标,但交互性远远高于角标。可以点击、选择、移除,设计属性也比角标多。先看示例代码:
1974+
1975+ ``` python3
1976+ from nicegui import ui
1977+
1978+ with ui.row().classes(" gap-1" ) as row:
1979+ ui.chip(" Click me" , icon = " ads_click" , on_click = lambda : ui.notify(" Clicked" ))
1980+ chip = ui.chip(
1981+ text = " Selectable" ,
1982+ selectable = True ,
1983+ icon = " bookmark" ,
1984+ color = " orange" ,
1985+ on_selection_change = lambda e : ui.notify(e.sender.selected),
1986+ )
1987+ chip2 = ui.chip(
1988+ text = " Removable" ,
1989+ removable = True ,
1990+ icon = " label" ,
1991+ color = " indigo-3" ,
1992+ on_value_change = lambda e : ui.notify(e.value),
1993+ )
1994+ ui.chip(" Styled" , icon = " star" , color = " green" ).props(" outline square" )
1995+ ui.chip(" Disabled" , icon = " block" , color = " red" ).set_enabled(False )
1996+ ui.button(" RESET" , on_click = lambda : (chip.set_selected(False ), chip2.set_value(True )))
1997+
1998+ ui.run(native = True )
1999+ ```
2000+
2001+ ![ ui_chip] ( README_MORE.assets/ui_chip.png )
2002+
2003+ 晶片控件支持以下参数:
2004+
2005+ ` text ` 参数,字符串类型,显示在控件内的内容。
2006+
2007+ ` icon ` 参数,字符串类型,控件内的图标。
2008+
2009+ ` color ` 参数,字符串类型,表示控件的颜色,支持传入字符串类型的颜色类(Quasar、 Tailwind、CSS的颜色名),默认为'primary',即和主题颜色一致。
2010+
2011+ ` text_color ` 参数,字符串类型或者None,表示文字的颜色,支持传入字符串类型的颜色类(Quasar、 Tailwind、CSS的颜色名)或者` None ` (即让文字变成默认颜色)。
2012+
2013+ ` on_click ` 参数,可调用类型,当点击控件时执行什么操作。注意,设置此参数,会同时添加控件的'clickable'属性,启用控件的鼠标悬停效果,让控件响应'click'事件。也就是说,如果直接使用` ui.chip('test').on('click',handler=lambda: ui.notify("Clicked")) ` 设置点击事件响应,这样操作并不能成功,只有` ui.chip('test').props('clickable').on('click',handler=lambda: ui.notify("Clicked")) ` 这样同时添加'clickable'属性才行。否则,只能用` ui.chip('test').on('mousedown',handler=lambda: ui.notify("Clicked")) ` 这样直接监听鼠标事件的响应才行,但这样会导致控件没有鼠标悬停效果。
2014+
2015+ ` selectable ` 参数,布尔类型,控件是否可选择,默认为` False ` 。
2016+
2017+ ` selected ` 参数,布尔类型,控件是否已经被选择,默认为` False ` 。
2018+
2019+ ` on_selection_change ` 参数,可调用类型,当控件被选择时执行什么操作。
2020+
2021+ ` removable ` 参数,布尔类型,控件是否可被移除,默认为` False ` 。如果设置为` True ` ,控件上会多一个"X"移除按钮。
2022+
2023+ ` on_value_change ` 参数,可调用类型,当控件的被移除状态变化时执行什么操作。实际上,控件被移除、未被移除,就是将控件的value设置为` False ` 、` True ` 。
2024+
2025+ 更多的设计属性可以参考[ 官方API] ( https://quasar.dev/vue-components/chip#qchip-api ) 。
2026+
2027+ 以下是一个动态添加、移除控件的代码示例:
2028+
2029+ ``` python3
2030+ from nicegui import ui
2031+
2032+ def add_chip ():
2033+ with chips:
2034+ ui.chip(label_input.value, icon = ' label' , color = ' silver' , removable = True )
2035+ label_input.value = ' '
2036+
2037+ label_input = ui.input(' Add label' ).on(' keydown.enter' , add_chip)
2038+ with label_input.add_slot(' append' ):
2039+ ui.button(icon = ' add' , on_click = add_chip).props(' round dense flat' )
2040+
2041+ with ui.row().classes(' gap-0' ) as chips:
2042+ ui.chip(' Label 1' , icon = ' label' , color = ' silver' , removable = True )
2043+
2044+ ui.button(' Restore removed chips' , icon = ' unarchive' ,
2045+ on_click = lambda : [chip.set_value(True ) for chip in chips]) \
2046+ .props(' flat' )
2047+
2048+ ui.run(native = True )
2049+ ```
2050+
2051+ #### 3.10.5 ui.toggle
2052+
2053+ 切换控件,功能上和单选按钮一样,操作起来有点像老式磁带播放机的按钮,每次只能点选一个:
2054+
2055+ ``` python3
2056+ from nicegui import ui
2057+
2058+ toggle1 = ui.toggle(
2059+ options = [1 , 2 , 3 ], value = 1 , clearable = True , on_change = lambda e : ui.notify(e.value)
2060+ )
2061+ toggle2 = ui.toggle({1 : " A" , 2 : " B" , 3 : " C" }).bind_value(toggle1, " value" )
2062+
2063+ ui.run(native = True )
2064+ ```
2065+
2066+ ![ ui_toggle] ( README_MORE.assets/ui_toggle.png )
2067+
2068+ 切换控件支持以下参数:
2069+
2070+ ` options ` 参数,列表类型或者字典类型,表示切换控件的所有选项。如果是列表,每个元素既是当前选择的值,也是显示出来的文本。如果是字典,则键(key)是当前选择的值,值(value)是显示出来的文本。
2071+
2072+ ` value ` 参数,表示控件初始选择的值。
2073+
2074+ ` on_change ` 参数,可调用类型,当值变化时执行什么操作
2075+
2076+ ` clearable ` 参数,布尔类型,表示是否可以通过点击当前选择的选项来取消选择,默认为` False ` ,即默认必须选择一个,没法取消选择。
2077+
2078+ 更多设计属性参考[ 官方API] ( https://quasar.dev/vue-components/button-toggle#qbtntoggle-api ) 。
2079+
2080+ #### 3.10.6 ui.radio(更新中)
2081+
2082+
2083+
2084+ #### 3.10.7 ui.select(更新中)
2085+
2086+
2087+
2088+ #### 3.10.8 ui.checkbox(更新中)
2089+
2090+
2091+
2092+ #### 3.10.9 ui.switch(更新中)
18432093
1844- ui.dropdown_button
18452094
18462095
2096+ #### 3.10.10 ui.range(更新中)
18472097
1848- ui.badge
18492098
18502099
2100+ #### 3.10.11 ui.joystick(更新中)
18512101
1852- ui.chip
18532102
1854- ui.toggle
18552103
1856- ui.radio
2104+ #### 3.10.12 ui.textarea(更新中)
18572105
18582106
18592107
1860- ui.select
2108+ #### 3.10.13 ui.number(更新中)
18612109
18622110
18632111
1864- ui.checkbox
2112+ #### 3.10.14 ui.color_input(更新中)
18652113
18662114
18672115
1868- ui.switch
2116+ #### 3.10.15 ui.color_picker(更新中)
18692117
1870- ui.range
18712118
1872- ui.joystick
18732119
1874- ui.textarea
2120+ #### 3.10.16 ui.date(更新中)
18752121
1876- ui.number
18772122
1878- ui.color_input
18792123
1880- ui.color_picker
2124+ #### 3.10.17 ui.time(更新中)
18812125
1882- ui.date
18832126
1884- ui.time
18852127
1886- ui.upload
2128+ #### 3.10.18 ui.upload(更新中)
18872129
18882130
18892131
0 commit comments