View Full Version : اجرای dialog box در ترد فرعی
SZsXsZS
سه شنبه 12 مرداد 1395, 23:18 عصر
من یه برنامهء بدون GUI دارم که بعضی وقتا نیاز داره یک dialog box ساده به کاربر نشون بده.
این برنامه توی یک حلقهء بینهایت مدام در حال اجراست. وقتی یک modal dialog نمایش داده میشه، اجرای برنامه تا وقتی که dialog box بسته نشه متوقف میشه. ولی من نمیخوام اینطور بشه چون برنامه مدام باید با برنامهء دیگری در حال تبادل ارتباط باشه.
خواستم dialog box روی ترد دیگری اجرا کنم که برنامه بلاک نشه، اما ظاهرا نمیشه و مشکل داره، یعنی دفعهء اول dialog box رو نشون میده اما دفعه های بعدی به مشکل میخوره.
با این نمونه کد مثلا میتونید تست کنید:
import tkinter
import tkinter.messagebox
import threading
import time
def messageBox():
root=tkinter.Tk()
root.withdraw()
tkinter.messagebox.showinfo('', 'test')
root.destroy()
i=0
while True:
i+=1
threading.Thread(target=messageBox).start()
time.sleep(5)
از Python 3.3.4 روی ویندوز XP SP3 استفاده میکنم.
چطور میشه این مشکل رو حل کرد؟
SZsXsZS
پنج شنبه 14 مرداد 1395, 22:24 عصر
خب ظاهرا tkinter زیاد از ترد بازی خوشش نمیاد!
بعضی جاها توصیه هم شده که GUI روی ترد اصلی برنامه باشه.
خب من این مشکل رو چطور حل کردم؟
کدهای مربوط به نمایش dialog رو کلا بردم توی یک اسکریپت پایتون جداگانه، و هر وقت نیاز به نمایش dialog دارم، از داخل برنامهء اصلی اون رو اجرا میکنم.
البته میشه راه حل های دیگری هم اندیشید، ولی بنظرم این راحت ترین و سریع ترین گزینه بود و باعث شد به ترکیب اصلی برنامه دست نزنم و نیاز به حداقل تغییرات و کدنویسی رو داشت.
barnamenevisforme
جمعه 15 مرداد 1395, 00:43 صبح
سلام
من هم چنین مشکلی رو دارم
یکی از راه حل ها استفاده از یک Qtimer هست که timeout اون با دستوراتی که بناست مرتب اجرا بشن connect شده باشه.
SZsXsZS
جمعه 15 مرداد 1395, 10:28 صبح
سلام
من هم چنین مشکلی رو دارم
یکی از راه حل ها استفاده از یک Qtimer هست که timeout اون با دستوراتی که بناست مرتب اجرا بشن connect شده باشه.
Qtimer که بنظرم مال Qt باشه (که در پایتون با PyQt میشه از کتابخانهء Qt استفاده کرد).
من از tkinter استفاده میکنم.
tkinter هم چیز بدی نیست. تاحالا که برنامه های کوچکی که من نوشتم چیزی کم نداشته و استفاده ازش هم بسیار ساده است. خوبی دیگش اینه بصورت پیشفرض همراه پایتون هست و نصب میشه و بدون هیچ مشکلی بصورت Built-in کار میکنه.
arman54
یک شنبه 17 مرداد 1395, 23:52 عصر
ببخشيد برنامه هايي كه با tkinter نوشتيد حجمشون چقدري در مياد
روي چه سيستم عاملايي كار ميكنن ؟
SZsXsZS
شنبه 30 مرداد 1395, 10:55 صبح
ببخشيد برنامه هايي كه با tkinter نوشتيد حجمشون چقدري در مياد
حجم؟!
حجمش میخوای چکار؟ این حجم زیاد مهم نیست مگر در کاربردهای خاص (مثلا embeded systems)
ضمنا خود برنامه پایتون که یکسری اسکریپت هست صرفا و حجمی نداره. چیزهای لازم و کتابخانه ها ایناش همراه مفسر پایتون هست که نصب میشه و موقع اجرا مفسر توی حافظه لود میشه و کارهای لازم رو انجام میده جای برنامهء شما عمل میکنه.
روي چه سيستم عاملايي كار ميكنن ؟
نمیدونم والا. ولی خب مسلمه که سیستم عاملهای متعددی رو پشتیبانی میکنه. پایتون، Tcl/Tk اینا همه بازمتن و مالتی پلتفرم هستن.
من روی ویندوز کار دارم فعلا که پایتون خوب کارم رو راه میندازه.
واسه یکسری برنامه های کوچک و یوتیلیتی مانند و اینها که سریع و راحت بخوای بنویسی.
از بین چند گزینه جاوا، Qt، PHP، پایتون بنظر من پایتون از همش راه دست تره. برنامه نویسی اینطور چیزا توش سریع و راحته. یک دلیلش اینه که اسکریپتی هست و دنگ و فنگ و زمان کامپایل های متعدد رو نداره، دومیش اینکه یک کتابخانهء GUI جمع و جور که البته یادگیری و استفاده و کدنویسیش هم خیلی سادس همراه خودش بصورت پیشفرض داره و نصب میشه و آمادس، بعدم خود زبان پایتون هم که انصافا زبان تمیز و راحتیه، محیط و تشکیلات پیچیده و سنگین و پرحجمی هم نداره و راحت و سریع نصب میشه و نمیگه مثلا ویندوز 7 به بالا باشه یا نمیدونم نیازهای جانبی که خیلی محیطهای برنامه نویسی دیگه دارن، نسبتا سبک و سریع هم هست.
البته دنیای بازمتن برنامه نویس علاقمند و قوی میخواد.
کسی که از دستی واسه GUI کد نوشتن ترس نداشته باشه به نرم افزارهای ویژوال وابسته نباشه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.