Python的界面神器Streamlit初使用,一个漂亮的界面有多简单,超乎想象

Python的界面神器Streamlit初使用,一个漂亮的界面有多简单,超乎想象

废话不多说,直接上干货

  1. 首先安装好所需要的库
pip install streamlit
  1. 新建一个 Python 文件(test.py),导入所需要的库,
import streamlit as st
import pandas as pd
  1. 打开命令,行输入命令,
streamlit run test.py

在这里插入图片描述

  1. 启动服务,可以看到输出信息证明已经成功启动了一个服务,浏览器会自动打开这个地址。
    在这里插入图片描述

  2. 现在页面什么东西都没有,加一句代码,打印一些文字

import streamlit as st
import pandas as pd
st.text("走过路过不要错过")

保存文件,此时页面右上角出现了一些选项按钮,选择总是返回,回到代码修改内容,现在页面可以自动刷新了。
在这里插入图片描述

接下来添加一个文件上传的组件参数type,指定接受的文件后缀名可以指定多种文件类型,所以是一个列表函数返回的是一个文件对象。我们可以直接使用 Pandas 读取数据,然后试试输出到界面上,这里有一个快捷方式,直接把变量 df写在这里,就会在界面上显示成一个表格。不过保存文件后发现页面出现报错信息。

uploaded_file = st.file_uploader('excel文件',type=['xlsx'])
df = pd.read_excel(uploaded_file)
st.dataframe(df)

在这里插入图片描述
streamlit每次页面更新都会执行一遍代码,我们还没有选择任何文件,所以文件上传组件的函数返回了一个None,到了 Pandas 加载数据就会报错。
在这里插入图片描述

这里要划重点了。 streamlit与其他框架非常不一样的地方就在于,我们写的代码就像一个描述了整个界面的文档, streamlit 每次都要从头到尾执行一次,才能知道画面上应该描绘出哪些内容。因此每当调用一个组件函数,就要注意判断空的情况。这里在上传组件函数之后,判断返回的文件对象是否有东西。这里有一个技巧,逻辑,尽可能描述空的情况下,然后跳出执行有专门的函数 stop 做这个事情,这样可以避免我们的代码出现大量的判断嵌套。

uploaded_file= st.file_uploader('excel文件',type=['xlsx'])
if uploaded_file is None:
    st.stop()

在这里插入图片描述

选择一个文件看看效果,可以正常显示。接着我们让 Pandas 一次性加载所有的工作表,不需要直接显示数据,而是做一个下拉列表框,让用户选择工作表名字,看看页面效果。
在这里插入图片描述
为了让大家更好理解其过程,我们再次分解其显示过程。第一次执行时,上传文件组件函数由于没有选择任何文件,所以返回了none,从而在下面的判断中执行了stop。因此这次执行只收集到上传文件组件的描绘,页面只显示这个组件。在页面上点击组件,选择了一个文件,页面上的上传文件组件数据有了变化,于是页面通知后台重新执行一遍代码,同时页面把上传文件组件的文件数据返回给后台,代码开始重新执行第一句代码时,函数返回了页面给的文件数据,因此函数有了返回值,不再是None。后续的创建,下拉选择框的代码也顺利被执行。本次执行结果收集到两个组件的创建信息,所以页面上创建了下拉框。接下来使用多选下拉框函数返回的列表创建页签,每个页签内创建表格即可。千万别忘了,如果没有选择任何工作表,要提前跳出执行看看,效果,很不错。

dfs=pd.read_excel(uploaded_file,None)
names = list(dfs.keys())
sheet_selected = st.multiselect('工作表',names,[])
if len(sheet_selected) == 0:
    st.stop()
tabs = st.tabs(sheet_selected)
for tab,name in zip(tabs,sheet_selected):
    with tab:
        df = dfs[name]
        st.dataframe(df)

根据streamlit的更新规则,不管页面上的任何组件有变化,整个代码都会被重新执行,那就意味着意味着 Pandas 加载数据的代码会被重复执行很多次。实际上数据文件根本没有变化,有没有什么办法可以让它只在我们重新选择其他文件的时候才执行?加载数据?方法很简单,独定义一个函数,接收文件对象,函数里面就是 Pandas 加载数据的代码,然后在函数上方打上装饰器,表明这是一个缓存函数,为了证明其缓存函数生效,我们在函数里面打印内容,到控制台。

@st.cache_data
def load_data(file):
    print("正在执行加载数据......")
    return pd.read_excel(file,None)
dfs=pd.read_excel(uploaded_file,None)
names = list(dfs.keys())
sheet_selected = st.multiselect('工作表',names,[])
if len(sheet_selected) == 0:
    st.stop()
tabs = st.tabs(sheet_selected)
for tab,name in zip(tabs,sheet_selected):
    with tab:
        df = dfs[name]
        st.dataframe(df)
  • 2
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 要使用 Python一个跨局域网的聊天程序,需要用到以下几个库: - socket: 用于网络通信 - tkinter: 用于创建 UI 界面 1. 使用 socket 库创建一个服务器端,绑定 IP 和端口,监听来自客户端的连接。 2. 使用 tkinter 库创建一个客户端的 UI 界面。 3. 在客户端中连接到服务器端,并在 UI 中输入和显示聊天信息。 具体的代码实现可能比较复杂,建议先了解 socket 和 tkinter 库的相关知识,再尝试编写代码。 ### 回答2: 要实现一个跨局域网的聊天应用程序,我们可以使用Python编写,并且为其创建一个UI界面。以下是一种实现方式: 首先,我们需要选择一个网络通信的库。在Python中,我们可以使用socket模块来实现基本的网络通信功能。使用socket,我们能够创建客户端和服务器端,它们之间可以进行双向通信。 在开始编写代码之前,我们需要定义一些基本的通信协议。例如,我们可以协商一种格式,用于发送和接收消息的标识符和数据。可以使用JSON格式或自定义的协议。 然后,我们可以使用Python的GUI库(例如Tkinter)来创建用户界面。我们可以设计一个简单的聊天窗口,其中包含消息输入框、发送按钮和显示接收消息的文本框。 接下来,我们可以编写客户端和服务器端的代码。客户端代码将监听用户的输入并将其发送到服务器端。服务器端代码将监听客户端的连接,并将接收到的消息广播给所有连接的客户端。服务器可以使用多线程或异步IO来处理多个客户端的连接。 最后,我们需要在不同的计算机上运行客户端。每个客户端应该输入服务器的IP地址和端口号,以便连接到服务器。一旦连接建立,客户端就可以发送和接收消息。 总结起来,要实现一个跨局域网的聊天应用程序,我们需要选择合适的网络通信库、定义通信协议、创建UI界面编写客户端和服务器端的代码,并进行适当的测试和调试。通过这样的方式,我们可以实现一个简单的跨局域网聊天应用程序。 ### 回答3: 要使用Python编写一个具有UI界面的跨局域网聊天程序,可以按照以下步骤进行: 1. 确保计算机已经安装了Python和所需的第三方库,如PyQt等。 2. 在Python中,使用套接字(sockets)库来实现网络通信。首先,编写服务器端代码。创建一个服务器套接字,并将其绑定到一个特定的IP地址和端口号上。使用`socket.bind()`方法来实现。然后使用`socket.listen()`方法来监听连接请求。当客户端连接到服务器时,服务器将会接受连接并创建一个新的套接字来处理与该客户端的通信。 3. 在服务器端,可以定义一些函数来处理接收到的消息,如发送消息给客户端(`socket.send()`)或接收来自客户端的消息(`socket.recv()`)。还可以定义其他功能,如广播消息给所有已连接的客户端。 4. 接下来,编写客户端代码。在客户端中,首先需要创建一个套接字,并向服务器端发送连接请求,使用`socket.connect()`方法实现。之后,可以使用类似于服务器端的`socket.send()`和`socket.recv()`方法进行发送和接收消息。 5. 在客户端和服务器端之间建立通信后,可以实现一些UI界面的功能。可以使用PyQt等库来创建窗口、按钮和文本框等界面元素。 6. 将服务器端代码和客户端代码分别运行在两台不同的计算机上,确保它们位于同一局域网中。可以使用局域网IP地址来连接服务器端。 7. 在UI界面中,可以通过按钮或文本框等元素来触发发送消息或接收消息的操作。当点击发送按钮时,客户端将会发送消息给服务器端,并在接收到消息后将其显示在UI界面中。服务器端也可以按需广播消息给所有已连接的客户端。 这样,就可以使用Python编写一个具有UI界面的跨局域网聊天程序了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weishaoonly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值