Python 我正试图用一个变量更新tkinter标签,但标签显示为空

Python 我正试图用一个变量更新tkinter标签,但标签显示为空,python,tkinter,Python,Tkinter,我知道有很多类似的帖子,但我找不到解决办法。我试图用tk.StringVar变量更新标签,但每次运行它时,它都是空的。如果我把文字放进去,效果很好。我给同一个变量起了一个不同的名字,看看它是否有区别,它没有 这是标签,功能如下,谢谢您的帮助 park1=selected_park.get() Label(newWindow, textvariable=park1, width=20, fg="black", font=("bold", 12), bd=1,

我知道有很多类似的帖子,但我找不到解决办法。我试图用tk.StringVar变量更新标签,但每次运行它时,它都是空的。如果我把文字放进去,效果很好。我给同一个变量起了一个不同的名字,看看它是否有区别,它没有

这是标签,功能如下,谢谢您的帮助

park1=selected_park.get()
Label(newWindow, textvariable=park1, width=20, fg="black", font=("bold", 12), bd=1, relief="raised").grid(row=0, col

def search_hikes():
    try:
        park = selected_park.get()
        difficulty = selected_diff.get()
        print(park, difficulty)

    except Exception as e:
        print(e)
        messagebox.showinfo("Tkinter", "Select State, Park, and Difficulty.")
        raise Exception

    try:
        rows_p, num_rows_p = search_parks_in_dbs(park, difficulty)
    except Exception as e:
        messagebox.showinfo("Tkinter", "Database error")
        exit()

    if num_rows_p == 0:
        messagebox.showinfo("Database Error", "No results")

    else:
        newWindow = tk.Toplevel(form)
        newWindow.title("Search Results")
        newWindow.geometry("1200x800")
        park1=selected_park.get()
        Label(newWindow, textvariable=park1, width=20, fg="black", font=("bold", 12), bd=1, relief="raised").grid(row=0, column=3)
        table = ttk.Treeview(newWindow, columns=(1, 2, 3, 4, 5, 6, 7), height=80, show="headings")

        table.heading(1, text="Hike Name")
        table.heading(2, text="Length(Mi)")
        table.heading(3, text="Elevation Gain(ft)")
        table.heading(4, text="Nearest City")
        table.heading(5, text="Location")
        table.heading(6, text="Difficulty")
        table.heading(7, text="Route Type")

        table.column(1, width=300)
        table.column(2, width=80)
        table.column(3, width=80)
        table.column(4, width=80)
        table.column(5, width=150)
        table.column(6, width=130)
        table.column(7, width=130)

        labelframe = Frame(newWindow)
        labelframe.grid(row=2, column = 0, columnspan=7, pady=10)

        parklabel =Label(newWindow,textvariable = park, width=20, font=("bold", 12), bd=1, relief="raised")

        table.grid(row=2, column=0, columnspan=7, padx=20, pady=20)

        parklabel.grid(row=2, column = 0, columnspan=7)



        for row in rows_p:
            table.insert('', 'end', values=(row[0], row[1], row[2], row[3], row[4], row[5], row[6]))


def search_parks_in_dbs(park, difficulty):
    try:
        con = open_database()
    except Exception:
        messagebox.showinfo("Database connection error")
        exit()

    messagebox.showinfo("Connected to Database", "DB Connection OK")

    try:
        sql = "SELECT h.hike_name, h.length_miles, h.elevation_gain_feet, h.nearest_city, " \
              "h.geo_location,  d.difficulty_name, r.route_name " \
              "FROM `park_tbl` p, `hike_tbl` h, `park-hike_rtbl` ph, `difficulty_tbl` d, `hike-difficulty_rtbl` hd, " \
              "`route_tbl` r, `hike-route_rtbl` hr " \
              "WHERE p.park_name = %s AND d.difficulty_level =%s AND p.park_id = ph.park_id " \
              "AND h.hike_id = ph.hike_id AND h.hike_id = hd.hike_id AND d.difficulty_id = hd.difficulty_id " \
              "AND h.hike_id = hr.hike_id AND r.route_id = hr.route_id"

        vals = (park, difficulty)
        print(sql)
        num_of_rows, rows = query_database(con, sql, vals)
    except DatabaseError:
        messagebox.showinfo("Error querying the database")

    return rows, num_of_rows

正如@acw1668所注意到的-
textvariable=
需要
StringVar
,而不是
string
-因此您必须在没有
.get()
的情况下分配
所选内容(因为
.get()
为您提供
字符串

现在,您可以使用

 selected_park.set("new_text")

似乎
park1
是一个字符串(选中的
结果\u park.get()
),那么为什么要在
textvariable
选项中使用字符串?
StringVar
在有两个
Tk()时可能不起作用
在代码中-但我没有看到@acw1668注意到-您需要
textvariable=selected\u park
而不是
textvariable=park1
。在所有
textvariable=
中都存在相同的问题,因为
textvariable
需要
StringVar
,而不是
string
。当您在
Label
中指定
textvariable=selected\u park
时,您可以使用
selected\u park.set(“new\u text”)
更改Label中的文本。是的,StringVar从组合框中更新,因此不需要使用textvariable=selected\u park以外的任何内容。我已经用.get()试过了,但当然没用。我现在明白为什么了。它现在工作得很好。谢谢大家!
 selected_park.set("new_text")