隐形胶佬 发表于 2020-6-29 09:38:24

tkinter.StringVar().get()一直是空值

b文件定义一个下拉框,选中下拉框调用func函数
import tkinter as tk
from tkinter import ttk


class Test:
    def __init__(self):
      self.lst = ['a', 'b']
      self.screen = tk.Tk()

      self.var = tk.StringVar()
      self.combobox = ttk.Combobox(self.screen, textvariable=self.var, value=self.lst)
      self.combobox.pack()
      self.combobox.current(0)
      self.combobox.bind("<<ComboboxSelected>>", self.func)

      self.screen.mainloop()

    def func(self, event):
      print(self.var.get())


if __name__ == '__main__':
    Test()
b文件自测能正常获取var的值

a文件通过按钮打开b文件的下拉框
import b
import tkinter as tk


def fun():
    b.Test()

if __name__ == '__main__':
    screen = tk.Tk()

    tk.Button(screen, text="测试", command=fun).pack()

    screen.mainloop()
选中下拉框时,获取到的var的值都是空值‘’

为什么var获取不到lst列表的值呢,求解

Twilight6 发表于 2020-6-29 09:54:26



应该是变量的作用域问题,你改成这样即可

import tkinter as tk
from tkinter import ttk


class Test:
    def __init__(self):
      self.lst = ['a', 'b']
      self.screen = tk.Tk()

      self.var = tk.StringVar()
      self.combobox = ttk.Combobox(self.screen, textvariable=self.var, value=self.lst)
      self.combobox.pack()
      self.combobox.current(0)
      self.combobox.bind("<<ComboboxSelected>>", self.func)

      self.screen.mainloop()

    def func(self, event):
      print(self.combobox.get())

if __name__ == '__main__':
    Test()

nllcywl 发表于 2020-6-29 10:03:32

666

隐形胶佬 发表于 2020-6-29 10:17:09

Twilight6 发表于 2020-6-29 09:54
应该是变量的作用域问题,你改成这样即可

谢谢大佬

self.var 跟 self.combobox 不应该是绑定在一起的吗,具体是有什么不同呢

Twilight6 发表于 2020-6-29 10:57:09

隐形胶佬 发表于 2020-6-29 10:17
谢谢大佬

self.var 跟 self.combobox 不应该是绑定在一起的吗,具体是有什么不同呢

我暂时也没搞明白 我研究研究

Twilight6 发表于 2020-6-29 11:27:15

隐形胶佬 发表于 2020-6-29 10:17
谢谢大佬

self.var 跟 self.combobox 不应该是绑定在一起的吗,具体是有什么不同呢

import tkinter as tk
from tkinter import ttk


class Test:
    def __init__(self):
      self.lst = ['a', 'b']
      self.screen = tk.Toplevel()# 你是 Tk() 重新创建了个根窗口,导致你 b 代码那打印的是空 ,改成 Toplevel 顶层窗口即可

      self.var = tk.StringVar()
      self.combobox = ttk.Combobox(self.screen, textvariable=self.var, value=self.lst)
      self.combobox.pack()
      self.combobox.current(0)
      self.combobox.bind("<<ComboboxSelected>>", self.func)

      # self.screen.mainloop()这个可以不要,因为你主程序有了这个,一个程序只需要一个mainloop 多余的是没意义的

    def func(self, event):
      print(self.var.get())

if __name__ == '__main__':
    Test()

隐形胶佬 发表于 2020-6-29 15:11:17

Twilight6 发表于 2020-6-29 11:27


好,我多试试
页: [1]
查看完整版本: tkinter.StringVar().get()一直是空值