【问题标题】:How to apply event generate to several entries如何将事件生成应用于多个条目
【发布时间】:2020-10-03 05:26:30
【问题描述】:

大家早上好,

我希望将 event_generate 应用于多个条目,每个条目都来自自动生成的不同框架。

我会尽量清楚地解释问题。感谢您的理解。 (我也尽量减少了代码) 一旦添加到每个条目的数量自动生成,我在 TAB 键上设置了一个 event_generate。 只有最后一个生成的条目显示 event_generate 之后的结果。所以我放了一个中断,例如在第二个条目。结果是正确的。我推断event_generate循环有效但只显示最后一次操作。

我制作视频以查看问题 event_generate show only the last result

================================================ ===

#                              TreeView Recettes - Rec_list
# ==================================================
# --- Insertion Table Nom HV dans TreeView
def DisplayData_Recette():
    for i in Recette_DB_BackEnd.loadRecord():
        Rec_list.insert('', 'end', text=i[0], values=(i[0]))

# --- Insertion Scrollbar
scrollbar_y = Scrollbar(F_TOP_Treeview, orient='vertical')  # Ascenseur Vertical
scrollbar_y.place(x=1786, y=24, height=169)

Rec_list = ttk.Treeview(F_TOP_Treeview, selectmode="browse", columns=(1), show="headings", yscrollcommand=scrollbar_y.set)
Rec_list.place(x=1502, y=2, width=285, height=175)

scrollbar_y.config(command=Rec_list.yview)  # Ascenseur Vertical
DisplayData_Recette()


# ==================================================
#                             SelectItem_Recettes
# ==================================================
def Clear_frameSelected():
    # Supprime toutes HV sélectionnées dans FrameCalc - frame
    global Clear_var_suite
    Clear_var_suite = 1
    for i in range(0, len(var_suite)):
        var1 = var_suite[i]
        removeLabel(var1)
    var_suite[:] = []                                                                                       # Vide liste var_suite


def selectionItem_Recette(a):
    Clear_frameSelected()
    # === [Sélection - Widget Treeview Recette] ===
    global Liste
    Liste = []
    Nom_Rec = StringVar()
    Name_HV = StringVar()
    Qt_Name_HV = DoubleVar()

    curItem = Rec_list.focus()
    Liste = Rec_list.item(curItem)["values"]

    Nom_Rec.set(Liste[0])                                                                               # Variable Nom HV - 1er élément du tableau Liste
    # print("Nom_Rec -->                                                               ", Nom_Rec.get())
    # === [Recensement Nom HV selon sélection effecttué dans Table] ===
    for row in Recette_DB_BackEnd.searchDataTable(Nom_Rec.get()):
        Name_HV.set(row[2])
        Qt_Name_HV.set(row[3])
        Display_HV(Name_HV, Qt_Name_HV)
    test()

# ==================================================
#                              Evénement Treeview HElist - Auto Sélection
# ==================================================
def Display_HV(Name_HV, Qt_Name_HV):
    global L_Nom_HV

    z = -1
    F_TOP_Treeview_ID.event_add('<<Declenche>>', '<ButtonRelease-1>')
    F_TOP_Treeview_ID.after(1000, lambda: F_TOP_Treeview_ID.event_generate('<<Declenche>>'))

    for item in F_TOP_Treeview_ID.get_children():
        z = z +1
        Ligne_HElist = []

        Ligne_HElist.append(F_TOP_Treeview_ID.item(item)["values"])                 # Liste HV de la recette cible

        if Name_HV.get() == Ligne_HElist[0][1]:
            L_Nom_HV.append(Name_HV.get())
            iid = F_TOP_Treeview_ID.get_children()[z]
            F_TOP_Treeview_ID.focus(iid)
            F_TOP_Treeview_ID.selection_set(iid)
            frame = F_TOP_Treeview_ID.get_children()[z]
            F_TOP_Treeview_ID.bind('<<Declenche>>', selectItem(frame))

            valeur_qt = Qt_Name_HV.get()
            Input_gr.insert(0, valeur_qt)                                                               # Insertion des quantités correspondnates à chacune des HV
            Input_gr.config(foreground="red")


def test():

    m = List_Input_gr[0]
    m.event_add('<<Declenche0>>', '<KeyRelease-Tab>')

    j = 0
    for kt in range(0, len(List_Input_gr)):
        m = List_Input_gr[kt]
        nom = L_Nom_HV[kt]
        Qpourc = List_Qpourc[kt]
        INSp = List_INSp[kt]
        IODEp = List_IODEp[kt]
        SC = List_SC[kt]
        HD = List_HD[kt]
        iHD = List_iHD[kt]
        CD = List_CD[kt]
        iCD = List_iCD[kt]
        CH = List_CH[kt]
        iCH = List_iCH[kt]
        BM = List_BM[kt]
        iBM = List_iBM[kt]
        CC = List_CC[kt]
        iCC = List_iCC[kt]
        La = List_La[kt]
        iLa = List_iLa[kt]
        M = List_M[kt]
        iM = List_iM[kt]
        P = List_P[kt]
        iP = List_iP[kt]
        S = List_S[kt]
        iS = List_iS[kt]
        CH18 = List_CH18[kt]
        iCH18 = List_iCH18[kt]
        O = List_O[kt]
        iO = List_iO[kt]
        L = List_L[kt]
        iL = List_iL[kt]
        Ln = List_Ln[kt]
        iLn = List_iLn[kt]
        Prix_gr = List_Prix_gr[kt]
        print("- ID_Entry -->   ", m, "         Nom Entry -->   ", Entry, "         Nom HV -->  ", nom)
        Entry.focus_force(m)
        Entry.focus_set(m)

        j = j + 1
        m.after(0, lambda: m.event_generate('<<Declenche0>>'))
        m.bind('<<Declenche0>>', lambda event, obj=m: Qgr(event, obj, nom, Qpourc, INSp, IODEp, SC, HD, iHD, CD, iCD, CH, iCH, BM, iBM, CC, iCC, La, iLa, M, iM, P, iP, S, iS, CH18, iCH18, O, iO, L, iL, Ln, iLn, Prix_gr))
        print("j",j, m)

        for keyNameEvent in m.event_info():
            # print("keyNameEvent", keyNameEvent)
            print("m.event_info('<<Declenche0>>')", m.event_info('<<Declenche0>>'))
        if j > 2:
            break


def Qgr(event, obj, nom, Qpourc, INSp, IODEp, SC, HD, iHD, CD, iCD, CH, iCH, BM, iBM, CC, iCC, La, iLa, M, iM, P, iP, S, iS, CH18, iCH18, O, iO, L, iL, Ln, iLn, Prix_gr):
    ...

提前感谢您的宝贵时间

【问题讨论】:

    标签: python html css windows macos


    【解决方案1】:

    这里是一个简单的例子 我有同样的问题,最后一个条目是好的。其他只处理

    def dosomething(event, m):
        print("OUI")
        # m.focus_set()
        # m.focus()
        m.delete(0, END)
        m.after(1, lambda: m.focus_set())
    
    def testy():
    
        m = List_Input_gr[0]
        m.event_add('<<Declenche0>>', '<KeyRelease-Tab>')
        for kt in range(0, len(List_Input_gr)):
            m = List_Input_gr[kt]
            print("m_in", m)
            m.after(0, lambda: m.event_generate('<<Declenche0>>'))
            m.bind('<<Declenche0>>', lambda event: dosomething(event, m))
    
    b1 = Button(FrameCalc, text="ttttttttt", command=testy)
    b1.grid(row=30, column=1)
    

    【讨论】:

      【解决方案2】:

      现在可以了。不知道方法对不对。谁有想法或可以确认。 感谢您的宝贵时间

      >   def dosomething(event, m):
              # m.focus_set()
              # m.focus()
              print("m -->1 ", m)
              m.delete(0, END)
              m.after(10, lambda: m.focus_set())
              print("OUI_1", event.widget)         # Identification du widget cible
      
      def testy():
          m = List_Input_gr[0]
          m.event_add('<<Declenche0>>', '<KeyRelease-Tab>')
          # m.after(1, lambda m=m: m.event_generate('<<Declenche0>>'))
      
          for kt in range(0, len(List_Input_gr)):
              m = List_Input_gr[kt]
              print("m --> ", m)
              m.after(1, lambda m=m: m.event_generate('<<Declenche0>>'))
              # m.after(1, lambda: m.event_generate('<<Declenche0>>'))
              m.bind('<<Declenche0>>', lambda event, m=m: dosomething(event, m))
      

      【讨论】:

        猜你喜欢
        • 2012-08-12
        • 2011-03-31
        • 2013-11-23
        • 2014-10-16
        • 2015-09-22
        • 2015-11-20
        • 1970-01-01
        • 2021-11-23
        • 1970-01-01
        相关资源
        最近更新 更多