簡體   English   中英

無法從 Combobox 中的 Tkinter 中獲取所選值

[英]Unable to get selected value from Combobox in Tkinter

我正在運行一段簡單的代碼,其中每當從 combobox 中選擇一個值時,都需要在終端中打印出來。 但是每當我 select 一個值時,在按下退出按鈕后,它就不會在終端上打印出來。

任何微調將不勝感激。

感謝您的幫助

from tkinter import *
from tkinter import ttk

win = Tk()

win.geometry("200x100")
vals = ('A','B','C','CD','E','FG')

current_var= StringVar()
cb= ttk.Combobox(win, textvariable = current_var)
cb['values']= vals
cb['state']= 'readonly'
cb.pack(fill='x',padx= 5, pady=5)
IP = current_var.get()
Button(win, text="Quit", command=win.destroy).pack()
win.mainloop()
print(IP)

如果您希望退出按鈕打印該值,請將其更改為類似這樣的內容。

from tkinter import *
from tkinter import ttk


def get_value():
    IP = current_var.get()
    print(IP)
    win.destroy()
    
win = Tk()

win.geometry("200x100")
vals = ('A','B','C','CD','E','FG')

current_var= StringVar()
cb= ttk.Combobox(win, textvariable = current_var)
cb['values']= vals
cb['state']= 'readonly'
cb.pack(fill='x',padx= 5, pady=5)
IP = current_var.get()
Button(win, text="Quit", command= get_value).pack()
win.mainloop()
print(IP)

@Rory 的回答不太正確,因為最終的print(IP)只是打印換行符(他可能沒有注意到)。 為了修復get_value()回調 function 應該聲明global IP ,所以IP不再是 function 的本地變量,它的值可以在 function 之外訪問。

下面的代碼說明了這一點,並且還遵循PEP 8 - Style Guide for Python Code guidelines 比你的問題更接近。

import tkinter as tk  # PEP 8 advises avoiding `import *`
import tkinter.ttk as ttk


def get_value():
    global IP
    IP = current_var.get()
    win.destroy()


win = tk.Tk()
win.geometry("200x100")
vals = 'A','B','C','CD','E','FG'
current_var = tk.StringVar(win)
cb = ttk.Combobox(win, textvariable=current_var, values=vals, state='readonly')
cb.pack(fill='x', padx= 5, pady=5)
tk.Button(win, text="Quit", command=get_value).pack()
win.mainloop()
print(IP)

您在創建cb后立即獲得該值,該值應該為空字符串,因為當時沒有選擇任何項目。 您需要在選擇項目后獲取該值。

一種方法是在 win.mainloop IP = current_var.get() win.mainloop()

from tkinter import *
from tkinter import ttk

win = Tk()
win.geometry("200x100")

vals = ('A','B','C','CD','E','FG')

current_var = StringVar()
cb= ttk.Combobox(win, textvariable=current_var)
cb['values'] = vals
cb['state'] = 'readonly'
cb.pack(fill='x', padx=5, pady=5)

Button(win, text="Quit", command=win.destroy).pack()

win.mainloop()

IP = current_var.get()
print(IP)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM