itzikc78 פורסם 2014 בפברואר 20 Share פורסם 2014 בפברואר 20 איך לעבוד נכון עם פתיחת ויצירת אובייקטים דינמיים?נניח, יש לי צ'אט ואני רוצה שכל פניה של חבר אלי תפתח חלון חדש (עם פקדים משלו שאוכל כמובן להתיחיסולעדכן ספצפיתי אותם כשהשיחה תתמשך)למשל משהו כזה:win_num = {} def OpenWindow(memberid,member_gender,member_UserNick,member_Message): print ("memberid:" + memberid + "gender" + member_gender + "usernick" + member_UserNick + "msg:" + member_Message) if memberid in win_num: print ("kooooooooooooooooooooooo") txt_num[memberid].insert(INSERT, member_UserNick + ": " + member_Message + "\n") else: win_num[memberid] = Toplevel() win_num[memberid].title(memberid) #lbl = Label(win_num[memberid],text='>>' + member_UserNick + ": " + member_Message ,fg='red',bg='white').pack() scrollbar = Scrollbar(win_num[memberid]) txt_num[memberid] = Text(win_num[memberid], wrap=WORD, bg="#FFFFE0", yscrollcommand=scrollbar.set,height=10,width=50) txt_num[memberid].grid(row=0,column=0,sticky=W) txt_num[memberid].insert(INSERT, member_UserNick + ": " + member_Message + "\n") scrollbar.grid(row=0,column=1,sticky=W) #text.insert(END, sText) scrollbar.config(command=(txt_num[memberid].yview)) button = Button(win_num[memberid], text="Dismiss") #button = Button(win_num[memberid], text="Dismiss", command=win_num[memberid].destroy) button.grid(row=1,column=0,sticky=W) #button1 = Button(win_num[memberid], text="send pm",command=lambda: Chat.send_pm()) button1 = Button(win_num[memberid], text="send pmm",command=lambda : myapp.send_pmm(memberid)) button1.grid(row=1,column=1,sticky=W)הקוד הזה עובד\לא עובד, תוקע לי את התוכנה, וכנראה לא בנוי נכון.איך עושים זאת נכון?(מתחיל, אז סליחה על השאלה הפעורה)תודה. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2014 בפברואר 20 Share פורסם 2014 בפברואר 20 באיזה חבילת GUI אתה משתמש? אתה מצפה שננחש? קישור לתוכן שתף באתרים אחרים More sharing options...
itzikc78 פורסם 2014 בפברואר 20 מחבר Share פורסם 2014 בפברואר 20 באיזה חבילת GUI אתה משתמש? אתה מצפה שננחש?אני משתמש ב tkinter (פייטון 3)(ובכל מקרה השאלה הרי יותר כללית, איך יוצרים שם משתנה דינמי, תוך כדי תנועה..) קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2014 בפברואר 20 Share פורסם 2014 בפברואר 20 לא יוצרים שם משתנה דינמי, פשוט שומרים את האובייקטים שלך ברשימה או מילון. קישור לתוכן שתף באתרים אחרים More sharing options...
itzikc78 פורסם 2014 בפברואר 20 מחבר Share פורסם 2014 בפברואר 20 תודה.אחרי קצת צמצום קוד, הגעתי למסקנה שפשוט השורה toplevel (עם פקד כפתור אחד בלבד ובלי משחקי dict/lists) פעם עובדת ו5 פעמים לא.. (התוכנה נתקעת.אין שגיאה)מדובר בסגירה של התוכנה ופתיחתה מחדש(ולא באירועים נוספים של topevel), כאילו משהו "נתקע בזיכרון". לא יודע להסביר את זה. קישור לתוכן שתף באתרים אחרים More sharing options...
itzikc78 פורסם 2014 בפברואר 20 מחבר Share פורסם 2014 בפברואר 20 אני חושב שהגעתי לשורש ה"בעיה".ואדגים אותה באמצעות הקוד הבא:import time, osfrom tkinter import *class Chat(): def sPrint(): s=0 while s < 11: s+=1 print (s, 'Sec') time.sleep(1) if s ==5: print ("5..") myapp.OpenWindow1() if s ==10: print ("10..") myapp.OpenWindow2()class App(Frame): def ConnectButton1(self): self.con1 = Button(self) self.con1["text"] = "Connect1", self.con1["command"] = lambda: Chat.sPrint() self.con1.grid(row=0,column=2,padx=5, pady=3,sticky=W) def OpenWindow1(self): win1 = Toplevel() def OpenWindow2(self): win2 = Toplevel()myapp = App()if __name__ == "__main__": myapp.ConnectButton1() myapp.pack() myapp.mainloop()מה שקורה במצב הזה, הטיימר רץ בלופ (בערך כמו הפונקציה בתוכנה המקורית הבעייתית),תוך כדי הריצה, הוא יבצע את הפקודות print, אבל החלונות של ה toplevel יפתחו שניהם רק בסוף.וזה בערך מה שקורה אצלי.. איך אני מגיע למצב שתוך כדי ריצת הפונקציה, ה toplevel האלו יפתחו בהתאם?אם אפתור את זה, אפתור כנראה את הבעיה בקוד המקורי.תודה! קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.