【问题标题】:Accessing parallel folder's file in a standalone application在独立应用程序中访问并行文件夹的文件
【发布时间】:2022-01-07 17:04:59
【问题描述】:

我使用 pyinstaller 创建了一个独立的 .app 应用程序(ToDoList.py / ToDoList.app / ToDoList (Unix Executable))。我的代码使用一个名为 List.tx 的文件来记住和存储放在屏幕上的数据。没有该文件,程序无法运行。我在将文件放入捆绑包时遇到问题,但最近我对 .app 进行了一些挖掘,发现当我使用“pyinstaller ToDoList.py --add-data”List.txt 时它会添加 List.txt 文件: ." --windowed"。 List.txt 文件放在与 unix 可执行文件平行的资源文件夹中,现在我需要找到一种方法来使用我的程序访问它。我将附上屏幕截图和我的代码。如果有人可以提供帮助,将不胜感激!

我的代码:

import tkinter as tk
from tkinter import *
open = open("List.txt", "r+")
file = open.readlines ()
def main ():
    window = Tk()
    window.title("To Do")
    def window_destroy ():
        window.destroy()
    window.geometry ("1440x808+0+0")
    to_do_label = Label(window, text="To Do List:", font=("Times New Roman",25,))
    to_do_label.place(relx=.5, y=20, anchor=CENTER)
    to_do_listbox = Listbox(window, width=50, height=20)
    for i in range(len(file)):
        to_do_listbox.insert(tk.END, str(file[i].strip()))
    to_do_listbox.place(relx=.5, y=230, anchor=CENTER)
    def delete_selected_item ():
        to_do_listbox.delete(tk.ANCHOR)
        for i in range(to_do_listbox.size()):
            open.truncate(i)
        for i in range(to_do_listbox.size()):
            open.write(to_do_listbox.get(i) + "\n")
    add_entry = Entry(window, width=50, font=("Times New Roman", 15))
    add_entry.place(relx=.5, y=425, anchor=CENTER)
    def add_entry_to_list ():
        to_do_listbox.insert(tk.END, add_entry.get())
        for i in range(to_do_listbox.size()):
            open.truncate(i)
        for i in range(to_do_listbox.size()):
            open.write(to_do_listbox.get(i) + "\n")
    add_button = Button(window, text="Add item", width=10, font=("Times New Roman", 15), command=add_entry_to_list)
    add_button.place(relx=.5, y=455, anchor=CENTER)
    delete_button = Button(window, text="Delete item", width=10, font=("Times New Roman", 15), command=delete_selected_item)
    delete_button.place(relx=.5, y=485, anchor=CENTER)
    quit_button = Button(window, text = "Quit", width=5, font=("Times New Roman",15), command=window_destroy)
    quit_button.pack(anchor = "s", side = "right")
    window.mainloop()
main ()

Folder photo

【问题讨论】:

  • 启动here 了解如何获取执行脚本的路径。
  • 申请期间不起作用
  • 为什么不呢?当你尝试时会发生什么?
  • 这能回答你的问题吗? stackoverflow.com/a/42615559/7432
  • 我对此进行了一些研究并尝试将其实现到我的应用程序中,但它不起作用。它给出的路径 Users/Moose/List.txt 绝对不是它所在的位置。我认为它没有意识到它实际上在包装中或无法阅读它

标签: python tkinter directory pyinstaller .app


【解决方案1】:

您应该能够使用这样的代码来打开您的文件:

import sys
from pathlib import Path
...
if getattr(sys, 'frozen', False):
    folder = Path(sys._MEIPASS)
else:
    folder = Path(__file__).parent
open = open(folder / "List.txt", "r+")

【讨论】:

  • 如何为多个文件而不是一个文件执行此操作? (即多个图像文件)
  • @moose 你对尽可能多的文件执行相同的操作。
  • 好的!非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
相关资源
最近更新 更多