簡體   English   中英

在兩個條目小部件 (tkinter) 中一次斷開多個輸入

[英]Disconnect Multiple input at once in two entry widgets (tkinter)

我需要使用 tkinter 為 Raspberry Pi 編寫一個 GUI(觸摸屏)。 我有兩個條目小部件,我需要分別輸入。 不幸的是,當我在小鍵盤上輸入一個值時,兩個條目都被寫入了。 如何更改它,我只能在選定的條目小部件中輸入一個值? 我假設問題出在 press function 和 expression.. 部分? 而且我的退出按鈕也不會關閉我的 window...?

謝謝您的幫助!

這是我的代碼:

import sys
import time
import struct
import select
import signal
import subprocess
import os
import shared
from tkinter import *
import tkinter

import time


ug = 0 #lower bound [cm]
og = 41 #Nutzbare höhe Wassertank [cm]


run = 0
run1 = 1

xdis = 1
ydis = 1

# globally declare the expression variable 
expression = ""

    
# Function to update expression in the text entry box 

def press(num): 
    global expression
    expression = expression + str(num)
    equation.set(expression)
    
    
def clear(): 
    global expression 
    expression = "" 
    equation.set("")



#create GUI
if __name__ == "__main__": 
    # create a GUI window 
    gui = Tk()
    gui.title("GUI") 

    equation = StringVar()
    
    #Label 1
    label1 = tkinter.Label(text ="Pumpenhöhe 1")
    label1.grid (row =0 , column =0 , padx = xdis , pady = ydis )

    #Eingabefeld 1 definieren
    eingabe1 = tkinter.Entry(gui, textvariable=equation, width=4, bg ='#ffffff')
    eingabe1.grid(row=0, column=1, padx=xdis, pady = ydis)
    eingabe1.focus_set()
    

    #Label 2
    label2 = tkinter.Label (text ="Pumpenhöhe 2") 
    label2.grid(row=1,column =0 , padx = xdis ,pady = ydis)

    #Eingabefeld 2
    eingabe2 = tkinter.Entry(gui, textvariable=equation, width=4,  bg ='#ffffff')
    eingabe2.grid(row=1, column=1, padx=xdis, pady = ydis)


    #button obj to start thread
    start_thread = tkinter.Button(text ="start thread(main loop)", command=start_thread)
    start_thread.grid(row=2, column=1, padx=xdis, pady = ydis)

    #button obj on framework to start thread
    set_setpoints = tkinter.Button(text ="Send", command = set_setpoints)
    set_setpoints.grid(row=2, column=2, padx= xdis, pady = ydis)
    
    #create exit button
    ex_bt = tkinter.Button(gui, text='Exit', command=gui.quit)
    ex_bt.grid(row=7, column=2, sticky=tkinter.W, padx=xdis, pady=ydis)
    
        
    #buttons for numpad
.
.
.
  
    clear = Button(gui, text='Clear',
                   command=clear, height=1, width=7) 
    clear.grid(row=6, column='1') 
  
    Decimal= Button(gui, text='.', 
                    command=lambda: press('.'), height=1, width=7) 
    Decimal.grid(row=6, column=2) 





    
gui.mainloop()
    

這是我的新代碼,它不起作用:

'''

def press(num):  
    global expression 
    expression = expression + str(num) 
    equation.set(expression)

def clear(): 
    global expression 
    expression = "" 
    equation1.set("")
    equation2.set("")


#create GUI
# Driver code 
if __name__ == "__main__": 
    # create a GUI window 
    gui = Tk()
    gui.title("GUI") 

    equation1 = StringVar()
    equation2 = StringVar()
    equation1.set("")
    equation2.set("")
    
    #Label 1
    label1 = tkinter.Label(text ="Pumpenhöhe 1")
    label1.grid (row =0 , column =0 , padx = xdis , pady = ydis )

    #Eingabefeld 1 definieren
    eingabe1 = tkinter.Entry(gui, textvariable=equation1, width=4, bg ='#ffffff')
    eingabe1.grid(row=0, column=1, padx=xdis, pady = ydis)
    eingabe1.focus_set()
    

    #Label 2
    label2 = tkinter.Label (text ="Pumpenhöhe 2") 
    label2.grid(row=1,column =0 , padx = xdis ,pady = ydis)

    #Eingabefeld 2
    eingabe2 = tkinter.Entry(gui, textvariable=equation2, width=4,  bg ='#ffffff')
    eingabe2.grid(row=1, column=1, padx=xdis, pady = ydis)

'''

正如你問了多個問題。 我將嘗試明智地回答問題。

  1. 我有兩個條目小部件,我需要單獨輸入。 不幸的是,當我在小鍵盤上輸入一個值時,這兩個條目都被寫入了。 如何更改它,我只能在已選擇的條目小部件中輸入一個值? [Piyush] 兩個條目小部件使用了相同的文本變量(方程式),因為兩個條目小部件是獨立的,因此兩個條目小部件應使用不同的文本變量。 我已經編輯了下面提到的兩個條目小部件的代碼 -

     equation1 = StringVar() equation2 = StringVar() equation1.set("") equation2.set("") #Label 1 label1 = tkinter.Label(text ="Pumpenhöhe 1") label1.grid (row =0, column =0, padx = xdis, pady = ydis ) #Eingabefeld 1 definieren eingabe1 = tkinter.Entry(gui, textvariable=equation1, width=4, bg ='#ffffff') eingabe1.grid(row=0, column=1, padx=xdis, pady = ydis) eingabe1.focus_set() #Label 2 label2 = tkinter.Label (text ="Pumpenhöhe 2") label2.grid(row=1,column =0, padx = xdis,pady = ydis) #Eingabefeld 2 eingabe2 = tkinter.Entry(gui, textvariable=equation2, width=4, bg ='#ffffff') eingabe2.grid(row=1, column=1, padx=xdis, pady = ydis)
  2. 我認為問題出在新聞 function 和表達式的部分......? [Piyush] 上面討論的條目小部件問題沒有發生,因為按下 function 和其中定義的表達式。 上面提到了這個問題的根本原因。

  3. 而且我的退出按鈕也不會關閉我的 window ...? [Piyush] 我在最后運行它檢查了共享代碼,退出按鈕按預期工作,它正在關閉 window。 它不適用於您,可能是因為 python 環境(python 版本等)。 還有另一種方法可以關閉 window,而不是使用 GUI.quit,您可以使用 GUI.destroy 並查看它是否有幫助。

這是我的新代碼,它不起作用:

'''

def press(num):  
    global expression 
    expression = expression + str(num) 
    equation.set(expression)

def clear(): 
    global expression 
    expression = "" 
    equation1.set("")
    equation2.set("")


#create GUI
# Driver code 
if __name__ == "__main__": 
    # create a GUI window 
    gui = Tk()
    gui.title("GUI") 

    equation1 = StringVar()
    equation2 = StringVar()
    equation1.set("")
    equation2.set("")
    
    #Label 1
    label1 = tkinter.Label(text ="Pumpenhöhe 1")
    label1.grid (row =0 , column =0 , padx = xdis , pady = ydis )

    #Eingabefeld 1 definieren
    eingabe1 = tkinter.Entry(gui, textvariable=equation1, width=4, bg ='#ffffff')
    eingabe1.grid(row=0, column=1, padx=xdis, pady = ydis)
    eingabe1.focus_set()
    

    #Label 2
    label2 = tkinter.Label (text ="Pumpenhöhe 2") 
    label2.grid(row=1,column =0 , padx = xdis ,pady = ydis)

    #Eingabefeld 2
    eingabe2 = tkinter.Entry(gui, textvariable=equation2, width=4,  bg ='#ffffff')
    eingabe2.grid(row=1, column=1, padx=xdis, pady = ydis)

'''

這是您可以嘗試的修訂代碼 -

def press(num):  
    global expression 
    expression = expression + str(num) 
    equation1.set(expression)

def clear(): 
    global expression 
    expression = "" 
    equation1.set("")
    equation2.set("")


#create GUI
# Driver code 
if __name__ == "__main__": 
    # create a GUI window 
    gui = Tk()
    gui.title("GUI") 

    equation1 = StringVar()
    equation2 = StringVar()
    equation1.set("")
    equation2.set("")
    
    #Label 1
    label1 = tkinter.Label(text ="Pumpenhöhe 1")
    label1.grid (row =0 , column =0 , padx = xdis , pady = ydis )

    #Eingabefeld 1 definieren
    eingabe1 = tkinter.Entry(gui, textvariable=equation1, width=4, bg ='#ffffff')
    eingabe1.grid(row=0, column=1, padx=xdis, pady = ydis)
    eingabe1.focus_set()
    

    #Label 2
    label2 = tkinter.Label (text ="Pumpenhöhe 2") 
    label2.grid(row=1,column =0 , padx = xdis ,pady = ydis)

    #Eingabefeld 2
    eingabe2 = tkinter.Entry(gui, textvariable=equation2, width=4,  bg ='#ffffff')
    eingabe2.grid(row=1, column=1, padx=xdis, pady = ydis)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM