output_usage.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. """
  2. 输出演示
  3. ^^^^^^^^^^^
  4. 演示PyWebIO支持的各种输出形式
  5. :demo_host:`Demo地址 </?pywebio_api=output_usage>` `源码 <https://github.com/wang0618/PyWebIO/blob/master/demos/output_usage.py>`_
  6. """
  7. from pywebio import start_server
  8. from pywebio.output import *
  9. from pywebio.session import hold
  10. def main():
  11. set_auto_scroll_bottom(False)
  12. set_title("PyWebIO输出演示")
  13. put_markdown("""# PyWebIO 输入演示
  14. 在[这里](https://github.com/wang0618/PyWebIO/blob/master/demos/input_usage.py)可以获取本Demo的源码。
  15. PyWebIO的输出函数都定义在 `pywebio.output` 模块中,可以使用 `from pywebio.output import *` 引入。
  16. ### 基本输出
  17. PyWebIO提供了一些便捷函数来输出表格、链接等格式:
  18. ```python
  19. # 文本输出
  20. put_text("Hello world!")
  21. # 表格输出
  22. put_table([
  23. ['商品', '价格'],
  24. ['苹果', '5.5'],
  25. ['香蕉', '7'],
  26. ])
  27. # Markdown输出
  28. put_markdown('~~删除线~~')
  29. # 文件输出
  30. put_file('hello_word.txt', b'hello word!')
  31. ```
  32. PyWebIO提供的全部输出函数请参考PyWebIO文档
  33. """, strip_indent=4)
  34. # 文本输出
  35. put_text("Hello world!")
  36. # 表格输出
  37. put_table([
  38. ['商品', '价格'],
  39. ['苹果', '5.5'],
  40. ['香蕉', '7'],
  41. ])
  42. # Markdown输出
  43. put_markdown('~~删除线~~')
  44. # 文件输出
  45. put_file('hello_word.txt', b'hello word!')
  46. put_markdown(r"""### 输出事件回调
  47. PyWebIO允许你输出一些控件,当控件被点击时执行提供的回调函数,就像编写GUI程序一样。
  48. 下面是一个例子:
  49. ```python
  50. from functools import partial
  51. def edit_row(choice, row):
  52. put_markdown("> You click`%s` button ar row `%s`" % (choice, row))
  53. put_table([
  54. ['Idx', 'Actions'],
  55. [1, table_cell_buttons(['edit', 'delete'], onclick=partial(edit_row, row=1))],
  56. [2, table_cell_buttons(['edit', 'delete'], onclick=partial(edit_row, row=2))],
  57. [3, table_cell_buttons(['edit', 'delete'], onclick=partial(edit_row, row=3))],
  58. ])
  59. ```
  60. """, strip_indent=4)
  61. from functools import partial
  62. def edit_row(choice, row):
  63. put_markdown("> You click `%s` button ar row `%s`" % (choice, row), anchor='table-callback')
  64. put_table([
  65. ['Idx', 'Actions'],
  66. [1, table_cell_buttons(['edit', 'delete'], onclick=partial(edit_row, row=1))],
  67. [2, table_cell_buttons(['edit', 'delete'], onclick=partial(edit_row, row=2))],
  68. [3, table_cell_buttons(['edit', 'delete'], onclick=partial(edit_row, row=3))],
  69. ])
  70. set_anchor('table-callback')
  71. put_markdown(r"""当然,PyWebIO还支持单独的按钮控件:
  72. ```python
  73. def btn_click(btn_val):
  74. put_markdown("> You click `%s` button" % btn_val)
  75. put_buttons(['A', 'B', 'C'], onclick=btn_click)
  76. ```
  77. """, strip_indent=4)
  78. def btn_click(btn_val):
  79. put_markdown("> You click `%s` button" % btn_val, anchor='button-callback')
  80. put_buttons(['A', 'B', 'C'], onclick=btn_click)
  81. set_anchor('button-callback')
  82. put_markdown(r"""### 锚点
  83. 就像在控制台输出文本一样,PyWebIO默认在页面的末尾输出各种内容,你可以使用锚点来改变这一行为。
  84. 你可以调用 `set_anchor(name)` 对当前输出位置进行标记。
  85. 你可以在任何输出函数中使用 `before` 参数将内容插入到指定的锚点之前,也可以使用 `after` 参数将内容插入到指定的锚点之后。
  86. 在输出函数中使用 `anchor` 参数为当前的输出内容标记锚点,若锚点已经存在,则将锚点处的内容替换为当前内容。
  87. 以下代码展示了在输出函数中使用锚点:
  88. ```python
  89. set_anchor('top')
  90. put_text('A')
  91. put_text('B', anchor='b')
  92. put_text('C', after='top')
  93. put_text('D', before='b')
  94. ```
  95. 以上代码将输出:
  96. C
  97. A
  98. D
  99. B
  100. """, strip_indent=4)
  101. put_markdown(r"""### 页面环境设置
  102. #### 输出区外观
  103. PyWebIO支持两种外观:输出区固定高度/可变高度。 可以通过调用 `set_output_fixed_height(True)` 来开启输出区固定高度。
  104. #### 设置页面标题
  105. 调用 `set_title(title)` 可以设置页面标题。
  106. #### 自动滚动
  107. 在不指定锚点进行输出时,PyWebIO默认在输出完毕后自动将页面滚动到页面最下方;在调用输入函数时,也会将页面滚动到表单处。 通过调用 `set_auto_scroll_bottom(False)` 来关闭自动滚动。
  108. """, strip_indent=4)
  109. hold()
  110. if __name__ == '__main__':
  111. start_server(main, debug=True, port=8080)