假设我有一个包含10个数字的文本文件

我已经编写了一个代码来 Select 并打开文件,默认窗口显示一个按钮来 Select 它和一个空的组合框

我想在打开文件但不关闭窗口时,用文件中的值填充组合框

from tkinter.filedialog import askopenfilename
import os
import tkinter as tk
from tkinter import ttk


class Application(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        ButtonSelect_File = tk.Button(self, text='Select file', command=self.displayPath)
        ButtonSelect_File.grid(row=1, column=0)

        self._File = tk.StringVar(self)
        self._File.set('')
        label_File = tk.Label(self, textvariable=self._File)
        label_File.grid(row=1, column=1)

        self.combobox = ttk.Combobox(self, values=[])
        self.combobox.grid(row=2, column=0)
        
        
    def displayPath(self):
        self.File = askopenfilename()
        self.directory = os.path.split(self.File)[0]
        self._File.set(self.File)
        
    def readFile(self, file):
        read = open(file, "r")
        values = [i for i in read]
        ### HOW TO ADD THESE VALUES TO THE COMBOBOX ####
        

if __name__ == "__main__":
    obj = Application()
    obj.mainloop()
    obj.readFile(obj.File)

有人能告诉我怎么做吗?

推荐答案

我重构了您的代码,以便在按钮、文件加载和向组合框中注入值之间建立清晰的连接.我个人并不觉得这里有什么需要解释的,但我要说的是.当您单击按钮时,将调用command,它运行load_values方法.在该方法中,调用askopenfilename,这将允许您加载文件.加载文件后,我们使用列表理解来形成一个由文件中的所有行组成的列表.然后,该列表通过其values键分配给Combobox.最后,我们通过分配给Comboboxtextvariable键的StringVar将第一个值存储在Combobox中.最后,我们确保这是__main__脚本,如果是这样,我们启动我们的应用程序并调用mainloop.

简而言之,这就是你已经在做的所有事情,添加了4行代码,将文件转换为值,并删除了一堆不相关的东西.

from tkinter.filedialog import askopenfilename
import tkinter as tk, tkinter.ttk as ttk
import os


class Application(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        loadbtn = tk.Button(self, text='Select file', command=self.load_values)
        loadbtn.grid(row=1, column=0)

        self._pv = tk.StringVar(self)
        pathlbl = tk.Label(self, textvariable=self._pv)
        pathlbl.grid(row=1, column=1)

        self._cbv = tk.StringVar()
        self._cb = ttk.Combobox(self, textvariable=self._cbv)
        self._cb.grid(row=2, column=0)
        
        
    def load_values(self):
        path = askopenfilename()
        self._pv.set(path)
        with open(path, "r") as f:
            v = [l.strip() for l in f.readlines()]
            self._cb['values'] = v
            self._cbv.set(v[0])
        
        
if __name__ == "__main__":
    Application().mainloop()

Python相关问答推荐

替换字符串中的多个重叠子字符串

Gekko:Spring-Mass系统的参数识别

_repr_html_实现自定义__getattr_时未显示

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

Stacked bar chart from billrame

什么是最好的方法来切割一个相框到一个面具的第一个实例?

如何使用SentenceTransformers创建矢量嵌入?

需要帮助重新调整python fill_between与数据点

在输入行运行时停止代码

(Python/Pandas)基于列中非缺失值的子集DataFrame

通过追加列表以极向聚合

比Pandas 更好的 Select

从一个df列提取单词,分配给另一个列

从嵌套极轴列的列表中删除元素

使用Python TCP套接字发送整数并使用C#接收—接收正确数据时出错

使用python playwright从 Select 子菜单中 Select 值

在pandas中,如何在由两列加上一个值列组成的枢轴期间或之后可靠地设置多级列的索引顺序,

在不中断格式的情况下在文件的特定部分插入XML标签

使用Scikit的ValueError-了解

如何删除剪裁圆的对角线的外部部分