【问题标题】:Disconnect Multiple input at once in two entry widgets (tkinter)在两个条目小部件(tkinter)中一次断开多个输入
【发布时间】:2021-03-23 23:38:33
【问题描述】:

我需要使用 tkinter 为 Raspberry Pi 编写 GUI(触摸屏)。我有两个条目小部件,我需要单独输入。不幸的是,当我在小键盘上输入一个值时,这两个条目都被写入了。如何更改它,我只能在已选择的条目小部件中输入一个值?我认为问题出在新闻功能和表达的部分..?而且我的退出按钮也不会关闭我的窗口...?

感谢您的帮助!

这是我的代码:

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()
    

【问题讨论】:

  • 要退出,请尝试gui.destroy。除此之外,我不明白你问题的另一部分。你所有的Entry 都有相同的textvariable,这是故意的吗?

标签: python tkinter button widget numpad


【解决方案1】:

正如您提出的多个问题一样。我会尽量回答问题。

  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. 我认为问题出在新闻功能和表达的部分..? [Piyush] 上面讨论的条目小部件问题没有发生,因为其中定义了按下功能和表达式。上面提到了这个问题的根本原因。

  3. 而且我的退出按钮也不会关闭我的窗口...? [Piyush] 我在最后运行它检查了共享代码,退出按钮按预期工作,它正在关闭窗口。它在你的最后不起作用,可能是因为 python 环境(python 版本等)。您可以通过另一种方式关闭窗口,而不是使用 GUI.quit,您可以使用 GUI.destroy 并查看它是否有帮助。

【讨论】:

  • 感谢您的帮助,GUI.destroy 帮助了!但是小部件问题仍然存在。当我用计算机的键盘输入值时,我可以单独输入选择的值,但是当我尝试通过单击 GUI 上的数字按钮输入值时它不起作用......这就是为什么我认为它在与新闻功能的相关性...
  • 由于我们已将条目小部件的文本变量从“方程式”更改为“方程式1”和“方程式2”,因此新闻功能也应相应更新,因为在新闻功能中我们仍在使用“方程式”变量。只需在 press 函数中更新此变量即可。我只是将它从“方程式”变量更改为“方程式1”并且它正在工作。如果您希望该数字按钮应在第二个条目小部件中添加值,则应将“方程式”更改为“方程式2”。试试这个,让我知道它是否有效。
  • 当我这样做时,我得到错误:"NameError: name 'equation' is not defined",for equation in press
【解决方案2】:

这是我的新代码,它不起作用:

'''

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)

'''

【讨论】:

    【解决方案3】:

    这是你可以尝试的修改代码-

    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)
    

    【讨论】:

    • 有了这个我只能在小部件 1 中输入一个值,但不能在小部件 2 中输入值
    • 您想在两个条目小部件中输入一个值吗?
    • 是,但两个小部件的值不同
    猜你喜欢
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多