简体   繁体   English

如何在 Python tkinter 中使用 Stringvar 收集字符串?

[英]How to collect a string with Stringvar inside Python tkinter?

I'm trying to get an entered information such as grade and a note.我正在尝试获取输入的信息,例如成绩和注释。 For grade I'm using OptionMenu and it prints perfectly, but my note (biljeska) won't print whatsoever对于成绩,我正在使用 OptionMenu,它打印完美,但我的笔记 (biljeska) 不会打印任何东西

Code example:代码示例:

import tkinter as tk
import datetime
dt = datetime.datetime.today()
class OdabirRazreda():
    def __init__(self):
        self.window2 = tk.Tk()
        g=tk.Button(self.window2,command=self.unos)
        g.pack()

        self.ocjena = tk.StringVar()
        self.razred=tk.StringVar()
        self.biljeska=tk.StringVar()
        self.ucenik=tk.StringVar()
        self.window2.mainloop()

    def unos(self):
        self.window2.withdraw()
        self.window4 = tk.Tk()

        lbl_ocjena = tk.Label(self.window4, text="Ocjena")
        self.lbl_biljeska = tk.Label(self.window4, text="Bilješka:")


        lbl_ocjena.grid(row=0, column=0, sticky=tk.W, pady=2)
        self.lbl_biljeska.grid(row=1, column=0, sticky=tk.W, pady=2)


        ent_ocjena = tk.OptionMenu(self.window4, self.ocjena, "1", "2", "3","4","5")
        ent_ocjena.grid(row=0, column=1, pady=2, )

        ent_biljeska = tk.Entry(master=self.window4,textvariable=self.biljeska)
        ent_biljeska.grid(row=1, column=1, pady=2)
        btn_unesi = tk.Button(self.window4, text='Unesi',command=self.ispis)
        btn_unesi.grid(row=3, column=1,pady=2)
        self.window4.mainloop()
    def ispis(self):
        print(dt.day,dt.month,self.ocjena.get(),self.biljeska.get())
OdabirRazreda()

In tkinter there is complication with mainloop method, i worked with your code little but outputs are not getting expected but, little convertion to frame methods its working good, if usefull can go throught the code of little modification在 tkinter 中,mainloop 方法很复杂,我很少使用您的代码,但输出没有得到预期,但是,很少转换到框架方法,它工作得很好,如果有用的话可以通过几乎没有修改的代码

import tkinter as tk
import datetime

dt = datetime.datetime.today()


class OdabirRazreda():
    def __init__(self):
        self.root = tk.Tk()

        self.window2 = tk.Frame(self.root)
        self.window2.pack()

        g = tk.Button(self.window2, command=self.unos,)
        g.pack()

        self.ocjena = tk.StringVar()
        self.razred = tk.StringVar()
        self.biljeska = tk.StringVar()
        self.ucenik = tk.StringVar()
        self.root.mainloop()

    def unos(self):
        self.window2.pack_forget() # 'can call destroy() also if no use in further'
        self.window4 = tk.Frame()
        self.window4.pack()

        lbl_ocjena = tk.Label(self.window4, text="Ocjena")
        self.lbl_biljeska = tk.Label(self.window4, text="Bilješka:")

        lbl_ocjena.grid(row=0, column=0, sticky=tk.W, pady=2)
        self.lbl_biljeska.grid(row=1, column=0, sticky=tk.W, pady=2)

        ent_ocjena = tk.OptionMenu(self.window4, self.ocjena, "1", "2", "3", "4", "5")
        ent_ocjena.grid(row=0, column=1, pady=2, )

        ent_biljeska = tk.Entry(master=self.window4, textvariable=self.biljeska)
        ent_biljeska.grid(row=1, column=1, pady=2)

        btn_unesi = tk.Button(self.window4, text='Unesi', command=self.ispis)
        btn_unesi.grid(row=3, column=1, pady=2)

    def ispis(self):
        print(dt.day, dt.month, self.ocjena.get(), self.biljeska.get())


OdabirRazreda()

just created the frames for both the windows and looping is assigned to main window as root...刚刚为两个窗口创建了框架,并且循环被分配给主窗口作为根...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM