tkinter: одновременно всплывает 2 windows - PullRequest
0 голосов
/ 22 января 2020

Как новичок, я не знаком с tkinter и не знаю, как улучшить следующие коды, которые должны работать следующим образом: После запуска файла renamer_v.py появится окно. Вверху отображается краткое описание, а под ним - оранжевая надпись «Click Me». Нажмите кнопку, а затем откройте второе окно, чтобы выбрать папку. Всем заголовкам файлов в папке, кроме скрытых и вложенных папок, будет присвоен префикс с сериализацией.

Проблема в том, что главное окно и второй виджет всплывают одновременно. Однако последний предназначен для отображения после нажатия кнопки пользователем.

Вот мой код souce. renamer_V1.py:

import win32file
import win32con
import tkinter as tk
from tkinter import Button
from clicked import Clicked

root=tk.Tk()
root.geometry("550x200")
label=tk.Label(root,font=("Arial Bold",15),
              text='Please select a directory to rename files in the folder:')
label.pack()
c=Clicked()
btn=Button(root,font=("Arial",15),bg='orange',text="Click Me",command=c.clicked)
btn.pack()

c.clicked()
file_lists=os.listdir(c.file_path)
n=0

for file in file_lists.copy():
    oldname=c.file_path+os.sep+file
    file_flag=win32file.GetFileAttributesW(oldname)
    is_hiden=file_flag & win32con.FILE_ATTRIBUTE_HIDDEN

    if os.path.isdir(oldname) or is_hiden:
        continue
    else:
        oldname=c.file_path+os.sep+file
        newname=c.file_path+os.sep+'('+str(n+1)+')'+file
        os.rename(oldname,newname)
        n+=1
label=tk.Label(root,text=str(n)+' file(s) renamed.')
label.pack()
root.mainloop()

clicked.py:


from tkinter import filedialog

class Clicked:
    file_path=None

    def __init__(self):
        print()    

    def clicked(self):
        self.file_path=filedialog.askdirectory(title='ReNamer')

1 Ответ

0 голосов
/ 23 января 2020

Приложение завершено, и теперь оно отлично работает под MacOS по желанию. Вот код:

import os
from tkinter import filedialog
import tkinter as tk
from tkinter import Button

root=tk.Tk()
class ReName():
    def __init__(self):
        self.n = 0
        self.label1=tk.Label(root)

    def rename(self):
        file_path = filedialog.askdirectory(title='ReNamer')
        self.file_lists = os.listdir(file_path)
        for self.file in self.file_lists.copy():
            self.oldname = file_path + os.sep + self.file
            if os.path.isdir(self.oldname) or self.file.startswith('.'):
                continue
            else:
                self.newname = file_path + os.sep + '(' + str(self.n + 1) + ')' + self.file
                os.rename(self.oldname, self.newname)
                self.n+=1
        self.label1.config(text='{} file(s) renamed'.format(self.n))
        self.label1.pack()
        btn.config(state='disabled')

ins=ReName()
root.geometry("550x200")
label=tk.Label(root,font=("Arial Bold",15),
               text='Please select a directory to rename files in the folder:')
label.pack()
btn=Button(root,font=("Arial",15),bg='orange',text="Click Me",command=ins.rename)
btn.pack()
root.mainloop()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...