سؤال

أنا أستخدم tkinter مع Python لإنشاء واجهة مستخدم لبرنامج يحول ملفات Excel إلى CSV.

لقد قمت بإنشاء تسمية لتكون بمثابة شريط الحالة، وقمت بتعيين StatusBarText باعتباره StringVar () كمتغير النص.inputFileEntry وoutputFileEntry عبارة عن متغيرات نصية تحتوي على مسارات ملفات الإدخال والإخراج.

def convertButtonClick():
    statusBarText.set('Converting...')

    if inputFileEntry.get() == '' or outputFileEntry.get() == '':
        statusBarText.set('Invalid Parameters.')
        return

    retcode = subprocess.('Program.exe' ,shell=true)

    if retcode == 0:
        statusBarText.set('Conversion Successful!')
    else:
        statusBarText.set('Conversion Failed!')

يتم استدعاء هذه الوظيفة عند النقر فوق زر التحويل، وكل شيء يعمل بشكل جيد باستثناء أن شريط الحالة لا يتغير أبدًا ليقول "جاري التحويل...".

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

لقد قمت بنسخ هذا السطر ولصقه بالضبط في عبارات if وهو يعمل بشكل جيد، ولكن لسبب ما لا يتغير أبدًا قبل تشغيل العملية الفرعية عندما تكون في الجزء العلوي من الوظيفة.أي مساعدة سيكون موضع تقدير كبير.

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

المحلول

نظرًا لأنك تقوم بكل هذا في استدعاء أسلوب واحد، فلن تحصل واجهة المستخدم الرسومية أبدًا على فرصة للتحديث قبل بدء العملية الفرعية.تحقق من استدعاء update_idletasks()...

من http://infohost.nmt.edu/tcc/help/pubs/tkinter/universal.html

w.update_idletasks()تُسمى بعض المهام في تحديث العرض، مثل تغيير حجم عناصر واجهة المستخدم وإعادة رسمها، بمهام خاملة لأنها عادةً ما يتم تأجيلها حتى ينتهي التطبيق من معالجة الأحداث ويعود إلى الحلقة الرئيسية لانتظار أحداث جديدة.
إذا كنت تريد فرض تحديث العرض قبل توقف التطبيق التالي، فاتصل بالطريقة w.update_idletasks() على أي عنصر واجهة مستخدم.

نصائح أخرى

وكيف يتم خلق لكم العلامة الخاصة بك؟ لدي هذا الإعداد اختبار قليلا:

from Tkinter import *
class LabelTest:

    def __init__(self, master):
        self.test = StringVar()

        self.button = Button(master, text="Change Label", command=self.change)
        self.button.grid(row=0, column=0, sticky=W)

        self.test.set("spam")
        self.testlabel = Label(master, textvariable = self.test).grid(row = 0,column = 1)
    def change(self):

        self.test.set("eggs")



root = Tk()
root.title("Label tester")
calc = LabelTest(root)

root.mainloop()

ويعمل. هل تأكد من استخدام "textvariable = StatusBarText" بدلا من "النص = StatusBarText.get ()"؟

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