【问题标题】:Tkinter label can't show the correct message(Win 10 python 3)Tkinter 标签无法显示正确的信息(Win 10 python 3)
【发布时间】:2019-10-29 04:20:34
【问题描述】:

当用户在 inputField 中键入文件名并单击保存按钮时,我尝试创建一个函数。可以使用新条目名称复制 mdb 文件,并且消息将显示源 => 目标。转到相同的文件名,它将显示文件已存在。但是当我输入新文件名时,单击保存按钮。它总是显示文件已存在。我无法弄清楚我的代码有什么问题。

from tkinter.ttk import *


class View(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.winfo_toplevel().title("Save File")
        self.grid()
        self.init_view()

    def init_view(self):
        self.inputText = Label(self)
        self.inputText["text"] = "Input Serial ID"
        self.inputText.grid(row=0, column=0, sticky=N + E)
        self.inputField = Entry(self)
        self.inputField["width"] = 20
        self.inputField.grid(row=0, column=1, sticky=N + W)

        self.save = Button(self)
        self.save["text"] = "Save"
        self.save.grid(row=1, column=1, sticky=N + W)

        self.displayText = Label(self)
        self.displayText["text"] = "Status:Idle"
        self.displayText.grid(row=3, column=0, columnspan=7, sticky=N)


if __name__ == '__main__':
    root = Tk()
    app = View(master=root)
    root.mainloop()
import shutil
import sys
from datetime import datetime
from Save_Server_View import View
from tkinter import Tk

year = datetime.now().year
month = datetime.now().month
src = r"HIDE FOR PRI"
dir = os.path.dirname(os.path.realpath('__file__'))
dst = os.path.join(dir, ".\\data\\" + str(year) + "\\" + str(month))


# Controller
class Controller:
    def __init__(self):
        self.app = View(master=Tk())
        self.app.save["command"] = self.save_method
        self.app.mainloop()

    # Copy & Rename File
    def save_method(self):
        for root, dirs, files in os.walk(src):
            for filename in files:
                if not os.path.exists(os.path.join(dst)):
                    message = (os.path.join(dst)), "not found"
                    self.app.displayText["text"] = message
                else:
                    first_src_file_path = os.path.join(src, '', filename)
                    new_dst_file_path = os.path.join(dst, '', self.app.inputField.get() + '.mdb')
                    new_dst_file_name = os.path.basename(new_dst_file_path)
                    try:
                        if not os.path.exists(os.path.join(dst, new_dst_file_name)):
                            shutil.copy(first_src_file_path, new_dst_file_path)
                            message = 'source={} => destination={}'.format(src, dst)
                            self.app.displayText["text"] = message
                    except:
                        message = "Unexpected error:", sys.exc_info()[0]
                        self.app.displayText["text"] = message
                    else:
                        self.app.displayText["text"] = 'File has existed.'

# Execute
if __name__ == '__main__':
    app = Controller()

当文件(使用新名称)复制到目标文件路径时,消息可以正确显示。然后显示'source={} => destination={}'.format(src, dst)'。当目标文件路径中的文件名相同时,会显示“文件已存在”。

【问题讨论】:

  • 当您单击save 按钮时,您并未更新src 的内容。 src 将始终拥有 r"HIDE FOR PRI"

标签: python python-3.x tkinter tk


【解决方案1】:

单击save 按钮时更新src 内容。 只需在 save_methodfunction 中的 for 循环之前添加以下行。

src = self.app.inputField.get()

【讨论】:

  • @Pruhdvi 我认为这段代码可能会导致错误的方向。我还是不明白。
  • 您提到它总是显示文件已存在,您收到此错误是因为 src 变量中的内容不是您在输入字段中输入的文本。
  • 您为文件夹中的所有文件提供相同的名称,这就是您收到此错误的原因
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2022-01-17
相关资源
最近更新 更多