【问题标题】:an entry get() doesn't return anything tkinter条目 get() 不返回任何内容
【发布时间】:2018-02-14 15:52:47
【问题描述】:

我正在使用带有 abd 类的 tkinter,我在添加产品时遇到了问题

class Add_Page():
  def __init__(self, child):
    self.child = child
    child.title = "Ajouter"

    self.l1=Label(child,text="Ajouter produit :",bg="blue").grid(row=0,columnspan=2)

    self.l2=Label(child,text="Matricule").grid(row=1,column=0) 
    self.vlrm = StringVar() 
    self.en2 = Entry(child, textvariable=self.vlrm, width=30).grid(row=1,column=1)

    self.l3=Label(child,text="Nom").grid(row=2,column=0)
    self.vlrn = StringVar() 
    self.en3 = Entry(child, textvariable=self.vlrn, width=30).grid(row=2,column=1)

    self.l4=Label(child,text="Prix").grid(row=3,column=0)
    self.vlrp = IntVar() 
    self.en4 = Entry(child, textvariable=self.vlrp, width=30).grid(row=3,column=1)

    self.b2=Button(child,text="Valider",command=self.add_p).grid(row=4,columnspan=2)

  #Add product function
  def add_p(self):

    print(self.vlrm.get())
    print(self.vlrp.get())

结果是一个空链和 0 我似乎没有发现问题,特别是我在用户类中使用了 get 方法并且它工作得很好 帮助

【问题讨论】:

  • 请提供minimal reproducible example。为什么我们需要弄清楚你是如何使用这个类的?我对您的代码的猜测按预期工作。
  • 对不起,我第一次在这里发帖,但我迷路了,不知道代码对我不起作用的问题是什么
  • 这个问题不足以提供答案。该代码不可测试,因此您需要按照 Nae 提供的链接并相应地重写您的问题。
  • aah 这是我的其余代码,我把它放在评论中,因为他们一直在我的数据库中添加一个 emty 产品 ''' produit = Products(matricule_pro=mat,name_pro=nom,price_pro=pric) session.add(produit) session.commit() self.child.withdraw()'''
  • @Shaymae 您可以edit 提出您的问题,但您在上面输入的内容几乎不是minimal reproducible example

标签: python python-3.x oop tkinter


【解决方案1】:

你不需要创建一个变量来输入,只为单选按钮或复选按钮做这个。你可以改变你创建的 tkinter 对象,就像那样

改变这个

self.l1=Label(child,text="Ajouter produit :",bg="blue").grid(row=0,columnspan=2)

为此

self.l1 = Label(child, text = "Ajouter produit :", bg = "blue")
self.l1.grid(row = 0, columnspan = 2) # remove all variables StringVar() and IntVar()

如果您以后需要使用 .config 或 .get() 进行一些更改,则不能在第一个示例中进行。您可以继续使用变量,但我不建议这样做,如果您进行此更改,.get() 现在可以工作。

我在 tkinter 中做了一个简单的绘图方法,你可以使用或更改,适用于 python 2

from Tkinter import *

class Draw_tk():
    Row, Column, List = 0, 0, []
    def __init__(self, child):
        self.child = child
        child.title = "Ajouter"
    def labelAndEntry(self, text): # def to create a entry and a label
        self.l = Label(self.child, text = text) # create label
        self.l.grid(row = Draw_tk.Row, column = Draw_tk.Column) # place label
        Draw_tk.Column += 1 # add 1 in Column to place the entry
        self.e = Entry(self.child, width = 30) # create entry
        self.e.grid(row = Draw_tk.Row, column = Draw_tk.Column) # place entry
        Draw_tk.List.append(self.e) # add the entry in a list
        Draw_tk.Row, Draw_tk.Column = Draw_tk.Row + 1, 0
    def label(self, text):
        self.l = Label(self.child, text = text, bg = "blue") # def to create a simple label
        self.l.grid(row = Draw_tk.Row, columnspan=2) # place the label
        Draw_tk.Row += 1
    def button(self, text, var): # create a simple button
        self.b = Button(self.child, text = text, command = var) # create button
        self.b.grid(row = Draw_tk.Row, column = Draw_tk.Column) # place the button

def valid():
    for item in Draw_tk.List: # run a variable in your values list
        print item.get() # get the value and print

root = Tk()
controller = Draw_tk(root) # create object Draw_tk
controller.label('Ajouter produit')
controller.labelAndEntry('Matricule')
controller.labelAndEntry('Nom')
controller.labelAndEntry('Prix')
controller.button('Valider', valid)
root.mainloop()

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 2020-01-10
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多