如何在运行其他函数后覆盖tkinter中的标签

2024-06-13 09:14:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我第一次用tkinter(python)制作GUI,我想在同一个地方显示结果,它们在开始的地方

当我运行此代码时,函数完全工作,但我无法在标签中显示结果

按钮必须从条目中获取数据,并将其提供给具有下拉列表中的数据的函数

结果应该覆盖列表as1,as2=[0,0],然后在标签result\u 1,result\u 2上显示结果

我曾尝试将“master”参数添加到函数-onclick中,但是GUI没有单击按钮就运行了

# coding=utf-8
from tkinter import *


def function_1(h, eta_bet):
    print(h, eta_bet)
    return h, eta_bet


def calculated_value_concrete(class_concrete):  # could be 20/25
    eta_bet = class_concrete
    return eta_bet


class Menu:
    def __init__(self, master):
        container = Label(master, bg="#003366")
        container.pack()

        menu_bg = Label(container, bg="#003366", fg="white", pady=15)
        countings_bg = Label(container)

        self.button1 = Button(menu_bg, text="Zbrojenie symetryczne", command=lambda: self.onclick(1, countings_bg),
                              width=20)

        menu_bg.pack(side=LEFT, fill=Y)

        self.button1.pack()

    def onclick(self, args, countings_bg):
        if args == 1:
            countings_bg.pack()
            ZbrojenieSymetryczne(countings_bg)


class ZbrojenieSymetryczne:
    def __init__(self, master):
        self.desc_1 = Label(master, text="Wysokość przekroju h [cm]")
        self.desc_7 = Label(master, text="Wybór betonu")
        self.data_1 = Entry(master, width=6)

        var = StringVar()
        var.set("Klasa")

        self.data_7 = OptionMenu(master, var, "1", "2", command=self.option_menu)
        self.data_7.config(width=10)

        self.desc_1.grid(row=1, sticky=E)
        self.desc_7.grid(row=7, sticky=E)

        self.data_1.grid(row=1, column=1)
        self.data_7.grid(row=7, column=1, stick="ew")

        self.button5 = Button(master, text="Count", command=self.onclick)
        self.button5.grid(row=9, columnspan=2, pady=10)

        as1, as2 = [0, 0]

        self.result_1 = Label(master, text=f"A_s1 = {as1} [cm^2]")
        self.result_1.grid(row=12, sticky=E)
        self.result_2 = Label(master, text=f"A_s2 = {as2} [cm^2]")
        self.result_2.grid(row=13, sticky=E)

    def option_menu(self, selection):
        self.eta_bet = calculated_value_concrete(selection)
        print(self.eta_bet)

    def onclick(self):
        h = float(self.data_1.get().replace(',', '.')) * 10 ** -2

        as1, as2 = function_1(h, self.eta_bet)

        self.result_1 = Label(master, text=f"A_s1 = {as1} [cm^2]")
        self.result_1.grid(row=12, sticky=E)
        self.result_2 = Label(master, text=f"A_s2 = {as2} [cm^2]")
        self.result_2.grid(row=13, sticky=E)


root = Tk()
root.title("Obliczanie zbrojenia")

Menu(root)
root.mainloop()

我希望结果在同一个标签,因为它是在开始(在按钮下)


Tags: textselfmasterdatadefresultlabelgrid
1条回答
网友
1楼 · 发布于 2024-06-13 09:14:12

如果您想更新现有标签的文本,有很多方法可以做到这一点,但是您可以考虑在onclick函数中进行更新,而不是创建新按钮

def onclick(self):
    h = float(self.data_1.get().replace(',', '.')) * 10 ** -2

    as1, as2 = function_1(h, self.eta_bet)

    self.result_1['text'] = f"A_s1 = {as1} [cm^2]"
    self.result_2['text'] = f"A_s2 = {as2} [cm^2]"

这应该根据f字符串设置结果1和结果2的文本

相关问题 更多 >