Auth1 / app.py
wenjiao's picture
Update app.py
6c26db1 verified
import gradio as gr
import pandas as pd
# 准备测试数据
data = {
"姓名": ["张三", "李四", "王五", "赵六"],
"岗位": ["高级算法工程师", "前端开发专家", "产品经理", "数据分析师"],
"个人简介": [
"负责大语言模型微调与落地,拥有多年AI研发经验。",
"精通Vue/React/Svelte,热衷于极致的用户体验与前端性能优化。",
"负责数据中台产品线,喜欢钻研用户痛点与商业闭环。",
"专注于商业数据挖掘与可视化看板建设,用数据驱动业务增长。"
],
}
df = pd.DataFrame(data)
# 用于给表格列头动态注入“拖拽条”并监听鼠标事件的 JS 脚本
js_drag_column_width = """
function() {
const observer = new MutationObserver(() => {
const ths = document.querySelectorAll('.gradio-container th');
if (ths.length === 0) return;
ths.forEach(th => {
if (th.querySelector('.resizer')) return;
const resizer = document.createElement('div');
resizer.className = 'resizer';
resizer.style.position = 'absolute';
resizer.style.right = '0';
resizer.style.top = '0';
resizer.style.width = '6px';
resizer.style.height = '100%';
resizer.style.cursor = 'col-resize';
resizer.style.userSelect = 'none';
resizer.style.zIndex = '1';
th.style.position = 'relative';
th.appendChild(resizer);
let startX, startWidth;
resizer.addEventListener('mousedown', function(e) {
startX = e.pageX;
startWidth = th.offsetWidth;
function doDrag(ev) {
th.style.width = (startWidth + (ev.pageX - startX)) + 'px';
th.style.minWidth = (startWidth + (ev.pageX - startX)) + 'px';
}
function stopDrag() {
document.removeEventListener('mousemove', doDrag);
document.removeEventListener('mouseup', stopDrag);
}
document.addEventListener('mousemove', doDrag);
document.addEventListener('mouseup', stopDrag);
e.preventDefault();
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
}
"""
# 自定义 CSS:代替已经失效的 height 参数,并美化拖拽条
custom_css = """
.resizer:hover {
background: #FF5722 !important;
width: 4px !important;
}
.gradio-container table {
table-layout: fixed;
width: 100%;
}
/* 给 dataframe 容器加上固定高度和滚动条,代替旧版的 height=400 */
.custom-table-container .table-wrap {
max-height: 400px;
overflow-y: auto;
}
"""
# Gradio 6.0 规范:gr.Blocks() 内部不再传递 css 和 js
with gr.Blocks() as demo:
gr.Markdown("### 💡 Gradio 6.0 Dataframe 鼠标拖拽改变列宽示例")
gr.Markdown("您可以把鼠标放到**表头列与列的交界处**,按住鼠标左键左右拖拽即可调整这一列的宽度。")
# 给外层组件加一个 elem_classes,方便用 CSS 锁死高度
with gr.Row(elem_classes="custom-table-container"):
gr.Dataframe(
value=df,
interactive=True,
wrap=False
)
if __name__ == "__main__":
# Gradio 6.0 规范:css 和 js 必须在这里传递
demo.launch(css=custom_css, js=js_drag_column_width)