
Ghi thuộc tính số nguyên, số thực, đúng/sai và ngày giờ: các kiểu dữ liệu của attribute
#Python#Attribute1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Không phải thuộc tính nào cũng là chuỗi. Khối lượng là số thực, số lượng là số nguyên, 'đã duyệt' là đúng/sai, ngày phát hành là thời gian. NX phân biệt kiểu và có hàm riêng cho từng kiểu.
Ghi thuộc tính số nguyên, số thực…Các bước thực hiện
- Số nguyên. SetUserAttribute(title, -1, int, option).
- Số thực. SetUserAttribute(title, -1, float, option).
- Đúng/sai. SetBooleanUserAttribute(title, -1, bool, option).
- Thời gian. SetTimeUserAttribute(title, -1, chuỗi ngày giờ, option).
- Đọc theo kiểu. Dùng AttributeType để phân biệt.
Code tham khảo (Python)
import time import NXOpen KHONG_MANG = -1 NGAY = NXOpen.Update.Option.Now KIEU = NXOpen.NXObject.AttributeType def ghi_cac_kieu(part): part.SetUserAttribute("SO_LUONG_TOI_THIEU", KHONG_MANG, 10, NGAY) # số nguyên part.SetUserAttribute("KHOI_LUONG", KHONG_MANG, 0.752, NGAY) # số thực part.SetBooleanUserAttribute("DA_DUYET", KHONG_MANG, True, NGAY) # đúng/sai part.SetTimeUserAttribute("NGAY_PHAT_HANH", KHONG_MANG, time.strftime("%d-%b-%Y %H:%M:%S"), NGAY) def doc_tat_ca(part): kq = [] for a in part.GetUserAttributes(): if a.Type == KIEU.Integer: v = a.IntegerValue elif a.Type == KIEU.Real: v = a.RealValue elif a.Type == KIEU.Boolean: v = a.BooleanValue elif a.Type == KIEU.Time: v = a.TimeValue else: v = a.StringValue kq.append((a.Title, str(a.Type).split(".")[-1], v)) return kq def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Ghi cac kieu") ghi_cac_kieu(part) for ten, kieu, gia_tri in doc_tat_ca(part): lw.WriteLine("%-22s %-8s %s" % (ten, kieu, gia_tri)) if __name__ == "__main__": main()Giải thích code
- Python tự chọn overload theo kiểu giá trị:
intghi thuộc tính nguyên,floatghi thuộc tính thực. - Giá trị thời gian là chuỗi theo định dạng NX (ví dụ
09-Oct-2026 10:30:00); tên tháng tiếng Anh viết tắt. - Khi đọc,
AttributeInformationcó sẵn các trườngIntegerValue,RealValue,StringValue...; chọn trường theoType.
Lỗi thường gặp
time.strftime("%b")phụ thuộc ngôn ngữ hệ điều hành; trên máy Windows tiếng Việt có thể không ra đúng tên tháng NX cần.- Truyền
True/FalsevàoSetUserAttributebị coi là số nguyên; dùngSetBooleanUserAttributecho thuộc tính đúng/sai.
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.