Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter。如何通过标签中的按钮存储条目_Python_User Interface_Tkinter - Fatal编程技术网

Python Tkinter。如何通过标签中的按钮存储条目

Python Tkinter。如何通过标签中的按钮存储条目,python,user-interface,tkinter,Python,User Interface,Tkinter,我真的需要一些代码方面的帮助。我不希望你为我写,因为这是一个学校的项目,但我真的迷失了方向,需要帮助 我正在编写的代码是某种生产系统。 它实际上不需要能够将任务发送到任何地方,因为这只是一个想象中的场景 代码必须由三个文件组成:data.py、model.py和gui.py Gui可以访问另外两个文件 数据只能访问模型 模型无法访问其他两个 我的老师写了一些代码,我继续讲下去。部分文本为丹麦语,但大多数评论为英语。 代码如下 data.py from model import * clas

我真的需要一些代码方面的帮助。我不希望你为我写,因为这是一个学校的项目,但我真的迷失了方向,需要帮助

我正在编写的代码是某种生产系统。
它实际上不需要能够将任务发送到任何地方,因为这只是一个想象中的场景

代码必须由三个文件组成:data.py、model.py和gui.py

  • Gui可以访问另外两个文件
  • 数据只能访问模型
  • 模型无法访问其他两个
我的老师写了一些代码,我继续讲下去。部分文本为丹麦语,但大多数评论为英语。 代码如下

data.py

from model import *

class Data(object):

def __init__(self):
    self.units = []
    self.finished_tasks = []

def __str__(self):
    result = "These tasks have been finished: "
    for i in self.finished_tasks:
        result += str(i)
    return result

def task_done(self, unit):
    done_task = unit.task_done()
    if done_task != None:
        #TODO: add to list of finished tasks
        pass

def add_task(self, name, amount, unit):
    s = Springroll_task(name, amount)
    unit.add_to_queue(s)

def read_from_database(self):#doesn't actually read from db..
    self.units.append(Production_unit("maskine1"))
    self.units.append(Production_unit("maskine2"))

    self.add_task("Miniruller", 100, self.units[0])
    self.add_task("Maxiruller", 200, self.units[0])
    self.add_task("HowIRoll", 3000, self.units[0])
    self.add_task("RulleMarie", 40, self.units[1])
    self.add_task("Rullesten", 500, self.units[1])
    self.add_task("Toiletpapirsruller", 6000, self.units[1])
    class Springroll_task(object):

    def __init__(self, name, amount):
        self.name = name
        self.amount = amount

    def __str__(self):
        return self.name + " " + str(self.amount)


class Production_unit(object):

    def __init__(self, amount={}, name={},):
        #name of the production unit
        self.name = name
        self.amount = amount
        #the current task
        self.current_task = None
        #the tasks in the queue
        self.springroll_queue = []
        #the size of the queue
        self.queue_size = 0

    def __str__(self):
        #TODO
        return self.name + " " + str(self.amount)

    def add_to_queue(self, task={}):
        if self.current_task == None:
            self.current_task = task
        else:
            self.springroll_queue.append(task)
            self.queue_size += 1
            #remember to update queue_size
            pass

    def task_done(self):
        #TODO: remember the old current task.
        #Set the current task to be the first in the queue (and remove from queue)
        # - if there is a task in the queue.
        #return the old current task.
        #remember to update queue_size
        self.queue_size -= 1
        pass
from tkinter import *
from model import *
from data import Data

class Application(Frame):
    def __init__(self, master, unit):
        self.mod = Production_unit()
        super(Application, self).__init__(master)  
        self.grid()
        self.unit = unit
        self.create_widgets()



    def create_widgets(self):
        self.unit_name_lbl = Label(self, text = self.unit.name)
        self.unit_name_lbl.grid(row = 0, column = 0, columnspan = 2, sticky = W)

        self.cur_prod_lbl = Label(self, text = "produktion nu: ")
        self.cur_prod_lbl.grid(row = 1, column = 0, columnspan = 2, sticky = W)

        self.prod_lbl = Label(self, text = "produkt")
        self.prod_lbl.grid(row = 2, column = 0, sticky = W)

        self.amount_lbl = Label(self, text = "antal")
        self.amount_lbl.grid(row = 2, column = 1, sticky = W)
        #Label for production now
        self.amount1_lbl = Label(self, text = "             ", bg ="red")
        self.amount1_lbl.grid(row = 3, column = 0, sticky = W)

        self.amount2_lbl = Label(self, text = "      ", bg ="red")
        self.amount2_lbl.grid(row = 3, column = 1, sticky = W)
        #Button for task finished
        self.finished_but = Button(self, text = "Opgave afsluttet", bg ="pink", command=self.mod.task_done)
        self.finished_but.grid(row = 3, column = 2, sticky = W)

        #Label for queue
        self.queue_lbl = Label(self, text = "Kø")
        self.queue_lbl.grid(row = 4, column = 0, sticky = W)
        #Label for production queue
        for i in range(0,3):
            self.name_lbl =Label(self, text = self.mod.springroll_queue, bg="red", width= 6)
            self.name_lbl.grid(row = 5+i, sticky = W)

        for j in range(0,3):
            self.qt_lbl =Label(self, text = self.mod.springroll_queue, bg="red", width= 4)
            self.qt_lbl.grid(row = 5+j, column = 1)

        self.new_lbl = Label(self, text = "Ny")
        self.new_lbl.grid(row = 10, column = 0, sticky = W)
        #Entry for entries
        self.eq1_ent = Entry(self, text = "", width=6)
        self.entry_name = self.eq1_ent.get()
        self.eq1_ent.grid(row = 11, sticky = W)

        self.ea1_ent = Entry(self, text = "", width=4)
        self.ea1_ent.grid(row = 11, column = 1, sticky = W)
        #Button for add to queue
        self.add_but = Button(self, text = "Tilføj til kø", bg ="pink", command=self.mod.add_to_queue(self.ea1_ent.get()))
        self.add_but.grid(row = 11, column = 2, sticky = W)





    def done(self):
        d.task_done(self.unit)
        self.redraw()

    def add(self):
        n = "Nyt navn" #read from gui
        a = "Nyt antal" #read from gui
        d.add_task(n, a, unit)
        self.redraw()


    def redraw(self):
        #TODO
        pass

# main
root = Tk()
root.title("Daloon")
root.geometry("300x300")

d = Data()

d.read_from_database()

p = d.units[0]

app = Application(root, p)

root.mainloop()
model.py

from model import *

class Data(object):

def __init__(self):
    self.units = []
    self.finished_tasks = []

def __str__(self):
    result = "These tasks have been finished: "
    for i in self.finished_tasks:
        result += str(i)
    return result

def task_done(self, unit):
    done_task = unit.task_done()
    if done_task != None:
        #TODO: add to list of finished tasks
        pass

def add_task(self, name, amount, unit):
    s = Springroll_task(name, amount)
    unit.add_to_queue(s)

def read_from_database(self):#doesn't actually read from db..
    self.units.append(Production_unit("maskine1"))
    self.units.append(Production_unit("maskine2"))

    self.add_task("Miniruller", 100, self.units[0])
    self.add_task("Maxiruller", 200, self.units[0])
    self.add_task("HowIRoll", 3000, self.units[0])
    self.add_task("RulleMarie", 40, self.units[1])
    self.add_task("Rullesten", 500, self.units[1])
    self.add_task("Toiletpapirsruller", 6000, self.units[1])
    class Springroll_task(object):

    def __init__(self, name, amount):
        self.name = name
        self.amount = amount

    def __str__(self):
        return self.name + " " + str(self.amount)


class Production_unit(object):

    def __init__(self, amount={}, name={},):
        #name of the production unit
        self.name = name
        self.amount = amount
        #the current task
        self.current_task = None
        #the tasks in the queue
        self.springroll_queue = []
        #the size of the queue
        self.queue_size = 0

    def __str__(self):
        #TODO
        return self.name + " " + str(self.amount)

    def add_to_queue(self, task={}):
        if self.current_task == None:
            self.current_task = task
        else:
            self.springroll_queue.append(task)
            self.queue_size += 1
            #remember to update queue_size
            pass

    def task_done(self):
        #TODO: remember the old current task.
        #Set the current task to be the first in the queue (and remove from queue)
        # - if there is a task in the queue.
        #return the old current task.
        #remember to update queue_size
        self.queue_size -= 1
        pass
from tkinter import *
from model import *
from data import Data

class Application(Frame):
    def __init__(self, master, unit):
        self.mod = Production_unit()
        super(Application, self).__init__(master)  
        self.grid()
        self.unit = unit
        self.create_widgets()



    def create_widgets(self):
        self.unit_name_lbl = Label(self, text = self.unit.name)
        self.unit_name_lbl.grid(row = 0, column = 0, columnspan = 2, sticky = W)

        self.cur_prod_lbl = Label(self, text = "produktion nu: ")
        self.cur_prod_lbl.grid(row = 1, column = 0, columnspan = 2, sticky = W)

        self.prod_lbl = Label(self, text = "produkt")
        self.prod_lbl.grid(row = 2, column = 0, sticky = W)

        self.amount_lbl = Label(self, text = "antal")
        self.amount_lbl.grid(row = 2, column = 1, sticky = W)
        #Label for production now
        self.amount1_lbl = Label(self, text = "             ", bg ="red")
        self.amount1_lbl.grid(row = 3, column = 0, sticky = W)

        self.amount2_lbl = Label(self, text = "      ", bg ="red")
        self.amount2_lbl.grid(row = 3, column = 1, sticky = W)
        #Button for task finished
        self.finished_but = Button(self, text = "Opgave afsluttet", bg ="pink", command=self.mod.task_done)
        self.finished_but.grid(row = 3, column = 2, sticky = W)

        #Label for queue
        self.queue_lbl = Label(self, text = "Kø")
        self.queue_lbl.grid(row = 4, column = 0, sticky = W)
        #Label for production queue
        for i in range(0,3):
            self.name_lbl =Label(self, text = self.mod.springroll_queue, bg="red", width= 6)
            self.name_lbl.grid(row = 5+i, sticky = W)

        for j in range(0,3):
            self.qt_lbl =Label(self, text = self.mod.springroll_queue, bg="red", width= 4)
            self.qt_lbl.grid(row = 5+j, column = 1)

        self.new_lbl = Label(self, text = "Ny")
        self.new_lbl.grid(row = 10, column = 0, sticky = W)
        #Entry for entries
        self.eq1_ent = Entry(self, text = "", width=6)
        self.entry_name = self.eq1_ent.get()
        self.eq1_ent.grid(row = 11, sticky = W)

        self.ea1_ent = Entry(self, text = "", width=4)
        self.ea1_ent.grid(row = 11, column = 1, sticky = W)
        #Button for add to queue
        self.add_but = Button(self, text = "Tilføj til kø", bg ="pink", command=self.mod.add_to_queue(self.ea1_ent.get()))
        self.add_but.grid(row = 11, column = 2, sticky = W)





    def done(self):
        d.task_done(self.unit)
        self.redraw()

    def add(self):
        n = "Nyt navn" #read from gui
        a = "Nyt antal" #read from gui
        d.add_task(n, a, unit)
        self.redraw()


    def redraw(self):
        #TODO
        pass

# main
root = Tk()
root.title("Daloon")
root.geometry("300x300")

d = Data()

d.read_from_database()

p = d.units[0]

app = Application(root, p)

root.mainloop()
gui.py

from model import *

class Data(object):

def __init__(self):
    self.units = []
    self.finished_tasks = []

def __str__(self):
    result = "These tasks have been finished: "
    for i in self.finished_tasks:
        result += str(i)
    return result

def task_done(self, unit):
    done_task = unit.task_done()
    if done_task != None:
        #TODO: add to list of finished tasks
        pass

def add_task(self, name, amount, unit):
    s = Springroll_task(name, amount)
    unit.add_to_queue(s)

def read_from_database(self):#doesn't actually read from db..
    self.units.append(Production_unit("maskine1"))
    self.units.append(Production_unit("maskine2"))

    self.add_task("Miniruller", 100, self.units[0])
    self.add_task("Maxiruller", 200, self.units[0])
    self.add_task("HowIRoll", 3000, self.units[0])
    self.add_task("RulleMarie", 40, self.units[1])
    self.add_task("Rullesten", 500, self.units[1])
    self.add_task("Toiletpapirsruller", 6000, self.units[1])
    class Springroll_task(object):

    def __init__(self, name, amount):
        self.name = name
        self.amount = amount

    def __str__(self):
        return self.name + " " + str(self.amount)


class Production_unit(object):

    def __init__(self, amount={}, name={},):
        #name of the production unit
        self.name = name
        self.amount = amount
        #the current task
        self.current_task = None
        #the tasks in the queue
        self.springroll_queue = []
        #the size of the queue
        self.queue_size = 0

    def __str__(self):
        #TODO
        return self.name + " " + str(self.amount)

    def add_to_queue(self, task={}):
        if self.current_task == None:
            self.current_task = task
        else:
            self.springroll_queue.append(task)
            self.queue_size += 1
            #remember to update queue_size
            pass

    def task_done(self):
        #TODO: remember the old current task.
        #Set the current task to be the first in the queue (and remove from queue)
        # - if there is a task in the queue.
        #return the old current task.
        #remember to update queue_size
        self.queue_size -= 1
        pass
from tkinter import *
from model import *
from data import Data

class Application(Frame):
    def __init__(self, master, unit):
        self.mod = Production_unit()
        super(Application, self).__init__(master)  
        self.grid()
        self.unit = unit
        self.create_widgets()



    def create_widgets(self):
        self.unit_name_lbl = Label(self, text = self.unit.name)
        self.unit_name_lbl.grid(row = 0, column = 0, columnspan = 2, sticky = W)

        self.cur_prod_lbl = Label(self, text = "produktion nu: ")
        self.cur_prod_lbl.grid(row = 1, column = 0, columnspan = 2, sticky = W)

        self.prod_lbl = Label(self, text = "produkt")
        self.prod_lbl.grid(row = 2, column = 0, sticky = W)

        self.amount_lbl = Label(self, text = "antal")
        self.amount_lbl.grid(row = 2, column = 1, sticky = W)
        #Label for production now
        self.amount1_lbl = Label(self, text = "             ", bg ="red")
        self.amount1_lbl.grid(row = 3, column = 0, sticky = W)

        self.amount2_lbl = Label(self, text = "      ", bg ="red")
        self.amount2_lbl.grid(row = 3, column = 1, sticky = W)
        #Button for task finished
        self.finished_but = Button(self, text = "Opgave afsluttet", bg ="pink", command=self.mod.task_done)
        self.finished_but.grid(row = 3, column = 2, sticky = W)

        #Label for queue
        self.queue_lbl = Label(self, text = "Kø")
        self.queue_lbl.grid(row = 4, column = 0, sticky = W)
        #Label for production queue
        for i in range(0,3):
            self.name_lbl =Label(self, text = self.mod.springroll_queue, bg="red", width= 6)
            self.name_lbl.grid(row = 5+i, sticky = W)

        for j in range(0,3):
            self.qt_lbl =Label(self, text = self.mod.springroll_queue, bg="red", width= 4)
            self.qt_lbl.grid(row = 5+j, column = 1)

        self.new_lbl = Label(self, text = "Ny")
        self.new_lbl.grid(row = 10, column = 0, sticky = W)
        #Entry for entries
        self.eq1_ent = Entry(self, text = "", width=6)
        self.entry_name = self.eq1_ent.get()
        self.eq1_ent.grid(row = 11, sticky = W)

        self.ea1_ent = Entry(self, text = "", width=4)
        self.ea1_ent.grid(row = 11, column = 1, sticky = W)
        #Button for add to queue
        self.add_but = Button(self, text = "Tilføj til kø", bg ="pink", command=self.mod.add_to_queue(self.ea1_ent.get()))
        self.add_but.grid(row = 11, column = 2, sticky = W)





    def done(self):
        d.task_done(self.unit)
        self.redraw()

    def add(self):
        n = "Nyt navn" #read from gui
        a = "Nyt antal" #read from gui
        d.add_task(n, a, unit)
        self.redraw()


    def redraw(self):
        #TODO
        pass

# main
root = Tk()
root.title("Daloon")
root.geometry("300x300")

d = Data()

d.read_from_database()

p = d.units[0]

app = Application(root, p)

root.mainloop()
所以现在看起来是这样的:

我需要能够做的是在底部的两个条目小部件中输入信息,然后将它们放入上面4个标签小部件中的一个,从顶部开始,然后放入队列中,这应该在我按下按钮add_时发生,但现在似乎不见了。
之后,当按下“opgivedafslutte”按钮时,我需要将任务存储在数据文件中

我真的希望有人能帮助我

我用一些建议编辑了它,我想我现在正在调用正确的self.eq1_ent.get()。我再也不会出错了,现在我真的不知道如何让它做我想做的。 编辑2:我正在慢慢地得到一些东西,所以我对model.py和gui.py进行了更改。。。 现在看起来是这样的:
自身。未定义eq1
。您有
self.q1\u lbl
self.eq1\u ent

要访问标签,请使用
self.q1\u lbl

要能够将文本设置为标签,请按以下方式创建它们:

self.var = StringVar()
self.unit_name_lbl = Label(self, textvariable=self.var)
例如,从
redraw()
可以将
'text'
设置为
self.unit\u name\u lbl
如下:
self.var.set('text')

  • 检查您是否遗漏了
    d中的
    self
    。添加任务(n,a,单位)

  • 当您执行
    command=mod.add_to_queue(self.ea1_ent.get())
    时,将直接调用
    mod.add_to_queue
    函数,如果您想在用户按下按钮时将参数传递给此函数,可以使用
    lambda

    command=lambda: mod.add_to_queue(self.ea1_ent.get)
    

自身。未定义eq1
。当您调用
Entry.get()
时,您有
self.q1\u lbl
self.eq1\u ent
,它将获得确切时刻的内容。由于您在创建空条目后立即调用
.get()
,因此只会得到空字符串。谢谢您的回答,其他人将其作为注释回答,但已将其删除,因此我已更正。我仍然不知道如何将标签amount1、Amount2以及所有q1-q3和a1-a3更改为我在条目中所写的内容。