اطلاعیه

Collapse
No announcement yet.

مشکل در gui متلب

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در gui متلب

    با سلام به همه دوستان

    من یک gui طراحی کردم که یکسری داده ها رو از textbox ها می گیره و بعد با زدن یک دکمه یکسری محاسبات رو روی آون ها انجام می ده و نتیج روی یکسری lable نشون میده. مشکل من اینه که وقتی برنامه رو اجرا می کنم و داخل textbox ها مقادیر رو می دم و اون دکمه رو می زنم داخل متلب error میده که پارامترهایی رو که داخل textbox ها وارد کردم نمی شناسه. این در صورتیه که من از tag ها بصورت درست استفاده کردم . حالا می خواستم بدونم مشکل از کجاست؟ اگه یک توضیح بدید ممنون می شم.

    راستی الان callback مربوط به textbox ها کی فعال میشه؟
    تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
    دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
    مقالات و فایل های آموزشی نرم افزار Labview
    حل مشکل درایور و راه اندازی FT232 های غیراورجینال

    #2
    پاسخ : مشکل در gui متلب

    سلام
    یک مثال شاید مشکل را حل کند. قرض کنید میخواهید دو عدد را از دو editbox بخوانید و وقتی دکمه ای را فشار میدهید، حاصل جمعشان را در یک static text نشان دهید.
    اگر فرض کنیم که تگهای editbox ها به ترتیب edit1 و edit2 باشه، و تگ مربوط به label هم static1 باشه، آنگاه در callback مریوط به دکمه فشاری باید کد زیر را نوشت:
    کد:
    h_edit1 = findobj(gcbf,'Tag','edit1');
    h_edit2 = findobj(gcbf,'Tag','edit2');
    h_text1 = findobj(gcbf,'Tag','text1');
    n1 = get(h_edit1,'String');
    N1 = str2num(n1{1});
    n2 = get(h_edit2,'String');
    N2 = str2num(n2{1});
    S = N1+N2;
    set(h_text1,'String',num2str(S));
    البته کد بالا در matlab2008a اجرا میشود. ورژنهای پایینتر را نمیدانم

    دیدگاه


      #3
      پاسخ : مشکل در gui متلب

      نوشته اصلی توسط BlueApple
      سلام
      یک مثال شاید مشکل را حل کند. قرض کنید میخواهید دو عدد را از دو editbox بخوانید و وقتی دکمه ای را فشار میدهید، حاصل جمعشان را در یک static text نشان دهید.
      اگر فرض کنیم که تگهای editbox ها به ترتیب edit1 و edit2 باشه، و تگ مربوط به label هم static1 باشه، آنگاه در callback مریوط به دکمه فشاری باید کد زیر را نوشت:
      کد:
      h_edit1 = findobj(gcbf,'Tag','edit1');
      h_edit2 = findobj(gcbf,'Tag','edit2');
      h_text1 = findobj(gcbf,'Tag','text1');
      n1 = get(h_edit1,'String');
      N1 = str2num(n1{1});
      n2 = get(h_edit2,'String');
      N2 = str2num(n2{1});
      S = N1+N2;
      set(h_text1,'String',num2str(S));
      البته کد بالا در matlab2008a اجرا میشود. ورژنهای پایینتر را نمیدانم
      ممنون که جواب دادی.

      دو تا سوال داشتم :
      1- اون دستور findobj کارش چیه ؟
      2- چرا اونجا که تدیل رشته به عدد کردی نوشتی مثلا n2{1} ? اون آکولاد ها برا چیه؟
      تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
      دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
      مقالات و فایل های آموزشی نرم افزار Labview
      حل مشکل درایور و راه اندازی FT232 های غیراورجینال

      دیدگاه


        #4
        پاسخ : مشکل در gui متلب

        سلام
        خواهش میکنم
        1- اون دستور findobj کارش چیه ؟
        دستور findobj یک دستور بسیار مفید برای کار در GUI هست و برای پیدا کردن هندل شیء(object) استفاده میشه. (مثالی از شیء: Edit Box و Static Box و ... )
        فرض کنید شما در figure خودتون یک شیء دارید. شما از Tag شیء مطلع هستید اما دانستن Tag برای خواندن اطلاعات شیء یا دستکاری کردنش کافی نیست. چیزی که شما بهش احتیاج دارید handle شیء هست. این دستور، Tag رو از شما میگیره و handle رو بهتون میده.
        کد:
        h_edit1 = findobj(gcbf,'Tag','edit1');
        برای مثال در کد بالا، Tag شیء ما برابر با 'edit1' است و h_edit1 هم هندل آن است که در ادامه برنامه استفاده شده.
        لازم به توضیحه که gcbf خودش یک دستوره مجزاست و هندل شکل فعال رو (که دکمه فشاری درش قرار گرفته) میده
        2- چرا اونجا که تدیل رشته به عدد کردی نوشتی مثلا n2{1} ? اون آکولاد ها برا چیه؟
        چون n2 یک آرایه سلولی است که تنها یک سلول دارد. دستور str2num روی آرایه سلولی کار نمیکنه. بنابراین نمیتوان نوشت: str2num(n2)
        اما n2{1} محتویات سلول اول آرایه سلولی است و دیگه از جنس سلول نیست بلکه از جنس رشته است.

        دیدگاه


          #5
          پاسخ : مشکل در gui متلب

          ممنون .
          مشکلم حل شد . مشکل این بود که اومده بودم داخل callback مربوط به textbox مقادیر اون ها رو تبدیل به NUM کرده بودم . بعد اون متغیری رو که دارای مقدار عددی بود و داخل callback مربوط به textbox ها بود رو داخلcallback مربوط به اون دکمه گذاشته بودم . و ابن در حالیه که این متغییر ها محلی هستن و فقط در همون تابع می تونیم ازش استفاده کنیم (Global نیستن) . در ضمن اوتبدبل رشته به عدد رو باید توی callback مربوط به به اون دکمه می نوشتم .

          اضافه شده در تاریخ :
          الان من داخل برنامم از یک dialog box استفاده کردم که وقتی بالا میاد یک مقداری رو از کاربر می گیره. ولی کاربر برای اینکه بتونه اون مقدار رو وارد کنه باید وقتی این پیام میاد بره تو محیط GUI و اون مقدار رو با Data cruser از روی منحنی بدست بیاره . ولی مشکل اینه که وقتی این پیام بالا میاد دیگه به صفحه اصلی GUI دسترسی نداری. می خواستم بدونم برای رفع این مشکل باید چه کار کنم ؟
          تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
          دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
          مقالات و فایل های آموزشی نرم افزار Labview
          حل مشکل درایور و راه اندازی FT232 های غیراورجینال

          دیدگاه

          لطفا صبر کنید...
          X