النص الثابت لا يُظهر السلسلة بأكملها عند تحميلها بـ set(handles.text3, 'String', myString)

StackOverflow https://stackoverflow.com//questions/21010172

  •  21-12-2019
  •  | 
  •  

سؤال

أنا أستخدم واجهة المستخدم الرسومية للعميل المصنوعة من GUIDE جنبًا إلى جنب مع اردوينو ووحدة بلوتوث.القصة القصيرة الطويلة هي أنني أريد أن أكون قادرًا على القراءة/الكتابة عبر البلوتوث على بطاقة SD.كل هذا يعمل بشكل جيد!

لكن!عند القراءة مرة أخرى من بطاقة SD، يقرأ MATLAB البيانات الصحيحة.يمكنني التحقق من ذلك لأنه عند الطباعة إلى نافذة الأوامر فإنه يظهر البيانات الصحيحة التي كانت موجودة على بطاقة sd.

المشكلة هي أنه عندما أحاول تعيين هذه البيانات على سلسلة نص ثابت في دليل حدوث بعض الأشياء المضحكة.يمكن تحميل النص الثابت بالنص، ولكن إذا قمت بعد ذلك بإضافة المزيد من النص إلى الملف الذي يتم تحميله منه وحاولت قراءته مرة أخرى، فإنه لا يزال يعرض البيانات القديمة فقط.أعلم أنه يتم تحديث السلسلة لأنه كما قلت عندما أقوم بالطباعة إلى الأمر فإنها تعرض البيانات الصحيحة.

لقد واجهت مشاكل غريبة في إعداد نص ثابت في هذا المشروع، هل لدى أي شخص أي أفكار لتسهيل الأمر؟المشاكل الأخرى التي أواجهها هي تعيين السلسلة في بداية وظيفة رد الاتصال ولكن لا يتم تحديث النص فعليًا إلا بعد أن ينفذ رد الاتصال الوظيفة بأكملها أو يلقي خطأ أو ما إلى ذلك.

هل كانت مفيدة؟

المحلول 2

لم تكن مشكلة السلم، لذلك لم يستلزم MATLAB حتى يتم الانتهاء من الوظيفة بأكملها.

نصائح أخرى

هل السلسلة طويلة جدًا بالنسبة لعنصر واجهة المستخدم الرسومية للسلسلة، على سبيل المثال، يمكن لعنصر واجهة المستخدم الرسومية للسلسلة أن يحتوي على 5 أسطر فقط، وأنت تحاول عرض 6، ثم 7، وما إلى ذلك.؟

لا يقوم Matlab تلقائيًا بإنتاج أشرطة التمرير على النص الثابت.يرى http://www.mathworks.com/matlabcentral/newsreader/view_thread/148773 لمناقشة البدائل.ما أفعله (بإذن من أحد زملائي في العمل الذي أظهر لي هذا) على شاشات عرض السجل في الوقت الفعلي هو (بافتراض أن هذا في حلقة) هذا، مع TxtMssg كونه النص الخاص بي "مربع" و rec_line كونه الخط الذي قرأته من المنفذ التسلسلي.

try
    % Determine NumLines empirically for your font, font size, and static text size
    NumLines = 21;
    % Get the contents of the static text box, make a cell if necessary
    Mssg = get(handles.TxtMssg, 'string');
    if iscell(Mssg) == 0
        Mssg={Mssg};
    end
    % Cat on the newly received line
    Mssg = [Mssg; rec_line];
    % trim to length of textbox, last NumLines rows only
    if length(Mssg) > NumLines
        Mssg = Mssg((end-NumLines+1):end);
    end
    % Write Mssg, with a strtrim() in case of any trailing newlines
    set(handles.TxtMssg, 'string', strtrim(Mssg));
catch err
    % Error handling
end

أوصي باستخدام try/catch/end مع تطبيقات من نوع تسجيل البيانات لمنع الاتصال المعيب من تعطل البرنامج بأكمله.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top