שם משתנה דינמי ב python - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שם משתנה דינמי ב python


itzikc78

Recommended Posts

איך לעבוד נכון עם פתיחת ויצירת אובייקטים דינמיים?

נניח, יש לי צ'אט ואני רוצה שכל פניה של חבר אלי תפתח חלון חדש (עם פקדים משלו שאוכל כמובן להתיחיס

ולעדכן ספצפיתי אותם כשהשיחה תתמשך)

למשל משהו כזה:



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)

הקוד הזה עובד\לא עובד, תוקע לי את התוכנה, וכנראה לא בנוי נכון.

איך עושים זאת נכון?

(מתחיל, אז סליחה על השאלה הפעורה)

תודה.

קישור לתוכן
שתף באתרים אחרים

תודה.

אחרי קצת צמצום קוד, הגעתי למסקנה שפשוט השורה toplevel (עם פקד כפתור אחד בלבד ובלי משחקי dict/lists) פעם עובדת ו5 פעמים לא.. (התוכנה נתקעת.אין שגיאה)

מדובר בסגירה של התוכנה ופתיחתה מחדש(ולא באירועים נוספים של topevel), כאילו משהו "נתקע בזיכרון".

לא יודע להסביר את זה.

קישור לתוכן
שתף באתרים אחרים

אני חושב שהגעתי לשורש ה"בעיה".

ואדגים אותה באמצעות הקוד הבא:


import time, os
from 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 האלו יפתחו בהתאם?

אם אפתור את זה, אפתור כנראה את הבעיה בקוד המקורי.

תודה!

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...