乐于分享
好东西不私藏

抓取LDR条码的UI软件

抓取LDR条码的UI软件

main.py
import tkinter as tk
from tkinter import ttkmessagebox
from mes_api import MesSnFetcher

class App(tk.Tk):
def __init__(self):
super().__init__()
self.title("LDR MES-SN 读取器")
self.geometry("500x350+300+200")
self.resizable(False, False)

# ---- 顶部输入区 ----
frm_top = ttk.Frame(self)
        frm_top.pack(fill='x'padx=10pady=10)

        ttk.Label(frm_toptext="MES 地址:").pack(side='left')
self.var_url = tk.StringVar(value="http://192.168.1.25:8080/api/barcode/find?position=2")
        ttk.Entry(frm_toptextvariable=self.var_urlwidth=50).pack(side='left'padx=5)
        ttk.Button(frm_toptext="获取 SN 列表"command=self.load_sn).pack(side='left'padx=5)

# ---- 中间表格 ----
columns = ("序号""SN 条码")
self.tree = ttk.Treeview(selfcolumns=columnsshow='headings'height=12)
for col in columns:
self.tree.heading(coltext=col)
self.tree.column(colwidth=240 if col == "SN 条码else 60anchor='center')
self.tree.pack(fill='both'padx=10pady=5)

# ---- 底部状态栏 ----
self.status = tk.StringVar(value="就绪")
        ttk.Label(selftextvariable=self.statusrelief='sunken'anchor='w').pack(fill='x'padx=10pady=3)

 main.py 里把 load_sn 整体替换成下面这段
def load_sn(self):
        url = self.var_url.get().strip()
if not url:
            messagebox.showwarning("提示""请先填写 MES 接口地址")
return
self.status.set("正在请求 MES ...")
self.update()

try:
            sn_list = MesSnFetcher.get_sn_list(url)
except Exception as e:
把任何异常都弹出来
import traceback
            msg = traceback.format_exc()
print(msg)  控制台也留一份
messagebox.showerror("请求失败"msg)
self.status.set("请求异常")
return
清空旧数据
for item in self.tree.get_children():
self.tree.delete(item)

if not sn_list:
            messagebox.showinfo("结果""未获取到任何 SN 条码")
self.status.set("就绪")
return
        for idxsn in enumerate(sn_list1):
self.tree.insert('''end'values=(idxsn))
self.status.set(f"共获取 {len(sn_list) SN")

# ---------- 入口 ----------
if __name__ == "__main__":
如果本机没有装 requests,给一次自动安装机会(可选)
try:
import requests
except ImportError:
import subprocesssysos
        subprocess.check_call([sys.executable"-m""pip""install""-r",
os.path.join(os.path.dirname(__file__)"requirements.txt")])
import requests   再次尝试导入
App().mainloop()
mes_api.py
import jsonrequests

class MesSnFetcher:
@staticmethod
def get_sn_list(plc_url: str):
"""
从力德尔内部 MES 获取 SN 列表
        返回 List[str] 全是 ProductBarcode
        """
url_query = plc_url.partition('?')          # url='http://.../find'  query='position=2'
position_val = query.split('=')[-1]             # '2'
payload = {'position': position_val}            # {'position':'2'}
headers = {'Content-Type''text/plain; charset=utf-8'}
        resp = requests.get(urlparams=payloadheaders=headerstimeout=5)
        resp.raise_for_status()                         网络层异常直接抛
替换 mes_api.py  17-26 
raw = resp.text.strip()  先拿完整字符串
if not raw:
return []

# 1. 如果包含 | 就先按 | 分段,否则按行
segments = raw.split('|'if '|' in raw else raw.splitlines()

        sn_list = []
for seg in segments:
            seg = seg.rstrip(';').strip()  去分号、去空白
if seg:
                sn_list.append(seg)
return sn_list
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 抓取LDR条码的UI软件

评论 抢沙发

6 + 1 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮