如何让我的 tkinter 原型系统计算出正确的总价

2024-04-08

我是一名初学者,我正在使用 Tkinter 为 DIY 商店创建一个原型系统,作为我任务的一部分。该应用程序的工作原理是填写一份简单的调查来创建订单。单击“输入数据”按钮后,页面底部应显示您的选择结果,包括总价。

我需要一些关于如何编写系统计算部分的建议,从def total():在代码中,但计算部分位于total_length,这就是我收到“未定义它”错误的地方错误信息 https://i.stack.imgur.com/2je37.png(https://i.stack.imgur.com/w5lZg.png https://i.stack.imgur.com/w5lZg.png).

我不知道如何通过它。我认为它是由我的计算定义的total_length = wallpaper_length_cost * 0.5.

import tkinter as tk
from tkinter import filedialog
from tkinter import ttk

def display_wallpaper_prints():
    window = tk.Toplevel()
    window.title("View Wallpaper prints")
    window.geometry("400x400")
    image_path = "Picture1A.png"
    img = tk.PhotoImage(file=image_path)
    label = ttk.Label(window, image=img)
    label.image = img
    label.pack(side="top", pady=10)


def enter_data():


    full_name = "Name: " + first_name_field.get() + "  " + surname_field.get()
    name_label.config(text=full_name)
    name_label.grid(column=0, row=4, columnspan=2)
    employeeID = "Employee ID: " + employeeID_field.get()
    ID_label.config(text=employeeID)
    ID_label.grid(column=6, row=4, columnspan=2)
    wallpaper_length = "Wallpaper length: " + wallpaper_length_combobox.get()
    wl_label.config(text=wallpaper_length)
    wl_label.grid(column=0, row=5, columnspan=2)
    wallpaper_selection = "Wallpaper selection: " + wallpaper_selection_combobox.get()
    ws_label.config(text=wallpaper_selection)
    ws_label.grid(column=6, row=5, columnspan=2)
    wallpaper_paste = "Wallpaper paste: " + wallpaper_paste_selection_combobox.get()
    wp_label.config(text=wallpaper_paste)
    wp_label.grid(column=0, row=6, columnspan=2)
    extras = "Extras: " + extras_selection_combobox.get()
    extras_label.config(text=extras)
    extras_label.grid(column=6, row=6, columnspan=2)
    lining_paper = "Lining: " + lining_paper_selection_combobox.get()
    lining_paper_label.config(text=lining_paper)
    lining_paper_label.grid(column=0, row=7, columnspan=2)

    print(full_name, employeeID)
    print(wallpaper_length, wallpaper_selection)
    print(extras, wallpaper_paste, lining_paper)


def total_cost():

    wallpaper_per_metre_cost = 0
    if wallpaper_selection_combobox.get() == "Option A (30p per metre)":
        wallpaper_per_metre_cost = 0.30
    elif wallpaper_selection_combobox.get() == "Option B (60p per metre)":
        wallpaper_per_metre_cost = 0.60


    wallpaper_length_cost = 0
    if wallpaper_length_combobox.get() == "10 metres":
        wallpaper_length_cost = 10
    elif wallpaper_length_combobox.get() == "15 metres":
        wallpaper_length_cost = 15
    elif wallpaper_length_combobox.get() == "20 metres":
        wallpaper_length_cost = 20
    elif wallpaper_length_combobox.get() == "25 metres":
        wallpaper_length_cost = 25

    extras_per_metre_cost = 0
    if extras_selection_combobox == "Foil (12p per metre)":
        extras_per_metre_cost = 0.12
    elif extras_selection_combobox == "Glitter (18p per metre)":
        extras_per_metre_cost = 0.18
    elif extras_selection_combobox == "Embossing (6p per metre)":
        extras_per_metre_cost = 0.06

    lining_paper_cost = 0
    if lining_paper_selection_combobox == "Yes, £7.63 per roll":
        lining_paper_cost = 7.63
    elif lining_paper_selection_combobox == "No":
        lining_paper_cost = 0

    wallpaper_paste_cost = 0
    if wallpaper_paste_selection_combobox == "Yes, £13.99 per tub":
        wallpaper_paste_cost = 13.99
    elif wallpaper_paste_selection_combobox == "No":
        wallpaper_paste_cost = 0

    total_length = wallpaper_length_cost.get() * 0.5

    wallpaper_total = wallpaper_per_metre_cost * total_length
    extras_total = extras_per_metre_cost * wallpaper_length_cost
    total_cost = wallpaper_total + extras_total + wallpaper_paste_cost + lining_paper_cost
    total_price = "Total price: £" + total_cost.get()
    total_price_label.config(text=total_price)
    total_price_label.grid(column=0, row=10, columnspan=2)

    print(total_length)
    print(wallpaper_total)
    print(extras_total)
    print(total_price)




window = tk.Tk()
window.title("Wallpapering with Sally")

frame = tk.Frame(window)
frame.pack()

#Customer info details
customer_info_frame = tk.LabelFrame(frame, text="Customer details")
customer_info_frame.grid(row= 0, column= 0, padx= 30, pady= 30)

first_name_label = tk.Label(customer_info_frame, text= "First Name")
first_name_label.grid(row= 0, column= 0)
surname_label = tk.Label(customer_info_frame, text= "Surname")
surname_label.grid(row= 0, column= 2)

first_name_field = tk.Entry(customer_info_frame)
surname_field = tk.Entry(customer_info_frame)
first_name_field.grid(row= 0, column= 1)
surname_field.grid(row= 0, column= 3)

employeeID_label = tk.Label(customer_info_frame, text= "Employee ID")
employeeID_label.grid(row= 1, column= 0)
employeeID_field = tk.Entry(customer_info_frame)
employeeID_field.grid(row= 1, column= 1)

for widget in customer_info_frame.winfo_children():
    widget.grid_configure(padx=30, pady= 30)

#Wallpaper form
wallpaper_frame = tk.LabelFrame(frame)
wallpaper_frame.grid(row=2, column=0)

#Wallpaper Legnth
wallpaper_length_label = tk.Label(wallpaper_frame, text= "How many metres of wallpaper would you like?")
wallpaper_length_combobox = ttk.Combobox(wallpaper_frame, values=["10 metres","15 metres","20 metres","25 metres"])
wallpaper_length_label.grid (row= 1, column= 0, pady= 10)
wallpaper_length_combobox.grid (row= 2, column= 0)


#Wallpaper Selection
wallpaper_selection_label = tk.Label(wallpaper_frame, text= "Which wallpaper would you like?")
wallpaper_selection_combobox = ttk.Combobox(wallpaper_frame, values=["Option A (30p per metre)","Option B (60p per metre)"])
wallpaper_selection_label.grid(row= 3, column= 0, sticky= "news", padx= 15, pady= 10)
wallpaper_selection_combobox.grid(row= 4, column= 0)

#Select Extras
extras_selection = tk.Label(wallpaper_frame, text= "Would you like any of the extras below?")
extras_selection_combobox = ttk.Combobox(wallpaper_frame, values= ["Foil (12p per metre)", "Glitter (18p per metre)", "Embossing (6p per metre)"])
extras_selection.grid(row= 5, column= 0, sticky= "news", padx= 15, pady= 10)
extras_selection_combobox.grid(row= 6, column= 0)


#lining paper combobox
lining_paper_selection = tk.Label(wallpaper_frame, text= "Do you require Lining paper? (20m rolls for £7.63)")
lining_paper_selection_combobox = ttk.Combobox(wallpaper_frame, values=["Yes, £7.63 per roll", "No"])
lining_paper_selection.grid(row= 7, column= 0, sticky= "news", padx= 15, pady= 10)
lining_paper_selection_combobox.grid(row= 8, column= 0)

#wallpaper paste selection
wallpaper_paste_selection = tk.Label(wallpaper_frame, text= "Do you require wallpaper paste? (10kg ready-mixed tubs)")
wallpaper_paste_selection_combobox = ttk.Combobox(wallpaper_frame, values=["Yes, £13.99 per tub", "No"])
wallpaper_paste_selection.grid(row= 9, column= 0, pady= 10, padx= 10)
wallpaper_paste_selection_combobox.grid (row=10, column= 0)

#enter data button
enter_data_button = ttk.Button(frame, text= "Enter Data", command= enter_data)
enter_data_button.grid(row= 3, column= 0, sticky= "news", padx= 20, pady= 20)

#wallpaper_prints_button
wallpaper_prints_button = ttk.Button(wallpaper_frame, text= "View wallpaper prints", command= display_wallpaper_prints)
wallpaper_prints_button.grid(row= 3, column= 1, pady= 10)

final_frame = tk.LabelFrame(frame)
final_frame.grid(row=4, column=0)


name_label = tk.Label(final_frame)

ID_label = tk.Label(final_frame)
wl_label = tk.Label(final_frame)
ws_label = tk.Label(final_frame)
wp_label = tk.Label(final_frame)
extras_label = tk.Label(final_frame)
lining_paper_label = tk.Label(final_frame)
total_price_label = tk.Label(final_frame)




window.mainloop()

我怎样才能让我的 tkinter 原型系统计算出正确的总数 价格

  • 在第 17 行添加total_cost() inside enter_data()功能。
  • 第 92 行,使用下划线_total_cost =因为重复def total_cost():

snippet:

def enter_data():
    total_cost() # Add this function
    ....
    ....
    ....

截屏:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让我的 tkinter 原型系统计算出正确的总价 的相关文章

  • 高效地将大型 Pandas 数据帧写入磁盘

    我正在尝试找到使用 Python Pandas 高效地将大型数据帧 250MB 写入磁盘或从磁盘写入的最佳方法 我已经尝试了所有方法Python 数据分析 但表现却非常令人失望 这是一个更大项目的一部分 该项目探索将我们当前的分析 数据管理
  • 如何将脚本作为 pytest 测试运行

    假设我有一个用简单脚本表示的测试assert 陈述 请参阅背景了解原因 例如 import foo assert foo 3 4 我如何以一种好的方式将该脚本包含在我的 pytest 测试套件中 我尝试了两种有效但不太好的方法 一种方法是将
  • 如何调试 numpy 掩码

    这个问题与this one https stackoverflow com q 73672739 11004423 我有一个正在尝试矢量化的函数 这是原来的函数 def aspect good angle float planet1 goo
  • 烧瓶 - 404 未找到

    我是烧瓶开发的新手 这是我在烧瓶中的第一个程序 但它向我显示了这个错误 在服务器上找不到请求的 URL 如果您输入了网址 请手动检查拼写并重试 这是我的代码 from flask import Flask app Flask name ap
  • 打印一份拥有多个家庭的人员名单,每个家庭都有多个电话号码

    我有一类 Person 它可以有多个 Home 每个 Home 都有一个或多个电话号码 我已经定义了类 但现在我正在尝试创建一个视图 其中列出每个人的所有家庭以及每个家庭地址的所有电话号码 类似于 john smith 123 fake s
  • 同一台机器上有多个Python版本?

    Python 网站上是否有关于如何在 Linux 上的同一台计算机上安装和运行多个版本的 Python 的官方文档 我可以找到无数的博客文章和答案 但我想知道是否有 标准 官方方法可以做到这一点 或者这一切都取决于操作系统 我认为它是完全独
  • 在 pygame 中,我如何创建一个数据结构来跟踪调整大小事件和对象的坐标?

    我希望在调整屏幕大小后使鼠标事件与对象保持同步 有人告诉我需要创建一个数据结构来跟踪 调整事件大小 新坐标以匹配调整大小 如何使用简单的代数方程来完成此操作并将其集成到调整大小事件中以进行准确更新 反过来做 创建一个虚拟游戏地图 在绘制场景
  • django 中的身份验证方法返回 None

    你好 我在 django 中做了一个简单的注册和登录页面 当想要登录时 登录视图中的身份验证方法不返回任何内容 我的身份验证应用程序 模型 py from django db import models from django contri
  • 导入目录下的所有模块

    有没有办法导入当前目录中的所有模块 并返回它们的列表 例如 对于包含以下内容的目录 mod py mod2 py mod3 py 它会给你
  • 错误:尝试使用 scrappy 登录时出现 raise ValueError("No element found in %s" % response)

    问题描述 我想从我大学的bbs上抓取一些信息 这是地址 http bbs byr cn http bbs byr cn下面是我的蜘蛛的代码 from lxml import etree import scrapy try from scra
  • 预测测试图像时出现错误 - 无法重塑大小数组

    我正在尝试使用 TensorFlow 和 Keras 在 Python 中进行图像识别 并且我已经关注了下面的博客 https stackabuse com image recognition in python with tensorfl
  • python中将对象数据类型转换为字符串问题

    如何将对象数据类型结构转换为字符串数据类型 下面的方法不起作用 该列仍然存在object转换为字符串后 astype import pandas as pd df pd DataFrame country A B C D E df dtyp
  • RuntimeError(f"目录 '{directory}' 不存在") RuntimeError: 目录 'app/static' 不存在

    当我运行 server py 文件时出现错误 File C Users nawin AppData Local Programs Python Python38 lib site packages starlette staticfiles
  • 在 for 循环中访问 itertools 产品的元素

    我有一个列表列表 是附加 itertools 产品的一些其他结果的结果 我想要的是能够使用 for 循环访问列表列表中列表的每个元素 但我无法访问所有元素 我只能访问最后一个列表的元素 结果是一个非常巨大的列表列表 例如 1 2 4 3 6
  • 使用 Sphinx 时,如何记录没有文档字符串的成员?

    我正在为我发布的包编写文档 我发现您的文档越全面 人们就越容易找到您的包来使用 废话 实际上 我在充满爱心地编写代码的所有功能和细节方面获得了很多乐趣 然而 我对如何为类级变量编写与 Sphinx 兼容的文档感到完全困惑 特别是 我有一些e
  • Python RE(总之检查第一个字母是否区分大小写,其余部分不区分大小写)

    在下面的情况下 我想匹配字符串 Singapore 其中 S 应始终为大写 其余单词可能为小写或大写 但在下面的字符串 s 是小写的 它在搜索条件中匹配 任何人都可以让我知道如何实施吗 import re st Information in
  • 在 anaconda 环境下运行 qsub

    我有一个程序 通常在 Linux 的 conda 环境中运行 因为我用它来管理我的库 指令如下 source activate my environment python hello world py 我怎样才能跑你好世界 py在与 PBS
  • 旧版本的 spaCy 在尝试安装模型时抛出“KeyError: 'package'”错误

    我在 Ubuntu 14 04 4 LTS x64 上使用 spaCy 1 6 0 和 python3 5 为了安装 spaCy 的英文版本 我尝试运行 这给了我错误消息 ubun ner 3 NeuroNER master src pyt
  • 如何在supervisord中设置组?

    因此 我正在设置 Supervisord 并尝试控制多个进程 并且一切正常 现在我想设置一个组 以便我可以启动 停止不同的进程集 而不是全部或全无 这是我的配置文件的片段 group tapjoy programs tapjoy game1
  • python 日志记录替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 蟒蛇记录模块 http docs python org library logging html使用起来

随机推荐