NX Lab

Block UI Styler cho người dùng Python: quy trình thiết kế file .dlx và gọi bằng CreateDialog

#Python#Block UI Styler1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Block UI Styler là công cụ tạo hộp thoại giống hệt hộp thoại NX. Giao diện được thiết kế bằng công cụ trực quan và lưu thành file .dlx; code Python chỉ nạp file đó và gắn các hàm xử lý sự kiện.

    Block UI Styler cho người dùng Python Block UI Styler cho người dùng Python

    Chuẩn bị

    • Mở Block UI Styler: tab Developer (hoặc menu Tools) > Block UI Styler.
    • Thiết kế hộp thoại với vài block: Integer, Double, String, Toggle, Select Object.
    • Đặt tên (Object Name) cho từng block bằng chữ không dấu; lưu thành file nxlab_dialog.dlx.

    Các bước thực hiện

    1. Thiết kế giao diện. Kéo thả block, đặt Object Name như integer0, double0, string0.
    2. Lưu file .dlx. Đặt cạnh script hoặc trong thư mục application của site.
    3. Tạo lớp Python. Một lớp giữ dialog và các hàm callback.
    4. Gắn handler. AddUpdateHandler, AddOkHandler, AddInitializeHandler...
    5. Hiển thị. dialog.Show() và hủy bằng Dispose() khi xong.

    Code tham khảo (Python)

    import os
    import NXOpen
    import NXOpen.BlockStyler
    
    class HopThoaiMau:
        def __init__(self):
            self.session = NXOpen.Session.GetSession()
            self.ui = NXOpen.UI.GetUI()
            duong_dan = os.path.join(os.path.dirname(os.path.abspath(__file__)), "nxlab_dialog.dlx")
            self.hop_thoai = self.ui.CreateDialog(duong_dan)
            self.hop_thoai.AddInitializeHandler(self.khoi_tao)
            self.hop_thoai.AddUpdateHandler(self.cap_nhat)
            self.hop_thoai.AddOkHandler(self.dong_y)
            self.hop_thoai.AddCancelHandler(self.huy)
            self.so_nguyen = None
    
        def khoi_tao(self):
            # Lấy block theo Object Name đã đặt trong Block UI Styler
            self.so_nguyen = self.hop_thoai.TopBlock.FindBlock("integer0")
            self.so_nguyen.Value = 4
    
        def cap_nhat(self, block):
            # Gọi mỗi khi người dùng đổi giá trị một block; trả về 0 nếu bình thường
            if block == self.so_nguyen:
                self.session.ListingWindow.Open()
                self.session.ListingWindow.WriteLine("Số nguyên = %d" % self.so_nguyen.Value)
            return 0
    
        def dong_y(self):
            self.session.ListingWindow.Open()
            self.session.ListingWindow.WriteLine("Nhấn OK với giá trị %d" % self.so_nguyen.Value)
            return 0
    
        def huy(self):
            return 0
    
        def hien_thi(self):
            return self.hop_thoai.Show()
    
        def giai_phong(self):
            if self.hop_thoai is not None:
                self.hop_thoai.Dispose()
                self.hop_thoai = None
    
    def main():
        h = HopThoaiMau()
        try:
            h.hien_thi()
        finally:
            h.giai_phong()
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • CreateDialog(đường_dẫn_dlx) nạp giao diện; file .dlx phải tồn tại cạnh script hoặc trong thư mục ứng dụng.
    • Các hàm AddXxxHandler gắn hàm xử lý cho từng sự kiện: khởi tạo, cập nhật, OK, hủy.
    • TopBlock.FindBlock(tên) lấy block theo Object Name; ép kiểu không cần vì Python tự dùng thuộc tính tương ứng.

    Lỗi thường gặp

    • File .dlx thiếu hay sai tên làm CreateDialog lỗi ngay; kiểm tra đường dẫn bằng os.path.isfile.
    • Quên Dispose() làm hộp thoại treo tài nguyên; luôn dùng try/finally.

    Mở rộng

    Bài kế tiếp trình bày cách đọc giá trị các loại block thông dụng.

    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.