尝试获取tkinter,小部件和邻近区域。 继续收到错误 - 谷歌搜索后,不会弹出答案。
由于某种原因,这个循环显示了输入行中的所有文件名 - 而不是一次一个... - 我做错了什么?
感谢您的帮助!
__author__ = 'Orphan Black'
import os
import sys
from tkinter import *
from tkinter.scrolledtext import *
import time
class PermFrame(Frame):
def __init__ (self, master):
super(PermFrame, self).__init__(master)
self.grid()
self.create_widgets()
self.createLable()
menu = Menu()
self.master.config(menu=menu)
file = Menu(menu)
file.add_command(label="Settings", command=self.setting_menu)
file.add_command(label="Exit", command=self.client_exit)
menu.add_cascade(label="File", menu=file)
about = Menu(menu)
about.add_command(label="Info")
menu.add_cascade(label="About", menu=about)
self.enpath_label = Label(self, text = "Enter path: ")
self.enpath_label.grid(row = 2, column = 2, sticky = W, padx=5, pady=5)
self.path_ent = Entry(self, width=52)
self.path_ent.grid(row = 2, column = 3, sticky = W, padx=5, pady=5)
self.sub_bttn = Button(self, text = "Check", command = self.submit_path)
self.sub_bttn.grid(row = 2, column = 4, sticky = W, padx=5, pady=5)
self.run_bttn = Button(self, text = "Run", command = self.run_prg)
self.run_bttn.grid(row = 2, column = 5, sticky = W, padx=5, pady=5)
self.orgfn_label = Label(self, text = "Original name: ")
self.orgfn_label.grid(row = 4, column = 2, sticky = W, padx=5, pady=5)
self.org_filename = Text(self, width=37, height = 1, wrap = WORD)
self.org_filename.grid(row=4, column = 3, columnspan = 5, sticky = W, padx=5, pady=5)
self.newfn_label = Label(self, text = "New name: ")
self.newfn_label.grid(row = 5, column = 2, sticky = W, padx=5, pady=5)
self.new_filename = Text(self, width=37, height = 1, wrap = WORD)
self.new_filename.grid(row=5, column = 3, columnspan = 5, sticky = W, padx=5, pady=5)
self.constxt_label = Label(self, text = "Console ")
self.constxt_label.grid(row = 6, column = 2, sticky = W, padx=5, pady=0)
self.console_txt = ScrolledText(self, width=71, height = 5, wrap = WORD)
self.console_txt.grid(row=7, column = 2, columnspan = 4, sticky = W, padx=5, pady=0)
def submit_path(self):
# console = console
time_date = time.strftime("%H:%M:%S")
contents = self.path_ent.get()
message = ("\n{}: Trying {}...".format(time_date, contents))
self.console_txt.insert(END, message)
try:
os.chdir(contents)
msgok = ("\n{}: The path {}, is valid".format(time_date, contents))
prg_start = ("\n{}: Program starting...".format(time_date, contents))
self.console_txt.insert(END, msgok)
except (ValueError, RuntimeError, TypeError, NameError, FileNotFoundError):
notok_mssg= ("\n{}: The path you entered is not valid...Enter a new path".format(time_date))
self.console_txt.insert(END,notok_mssg,)
def run_prg(self):
os.listdir(self.path_ent.get())
for file in os.listdir(self.path_ent.get()):
#print(file)
self.org_filename.insert(END,(file))
答案 0 :(得分:0)
您似乎希望您的条目窗口小部件在迭代时一次显示os.listdir
的内容,并在每次迭代时更改条目窗口小部件值。
但是,当你在迭代时,你会继续在Entry小部件的最后一个索引处插入条目小部件。你永远不会删除Entry小部件的内容,所以你只看到这是一个大文本网格。
坚持使用Entry小部件......你可以这样做:
self.org_filename.delete(0, END) #Could also use "end" instead of END
#insert new text
如果您只想要更新文本行为,那么您应该只使用标签。使用标签更容易。
some_label['text'] = new_filename
附加说明:
您应该在forloop中使用file
以外的名称。这是一个内置的关键字。无论何时这样做,你都会覆盖功能。
使用小脚本,这不是什么大问题,但是当你开始扩展你的程序时,很容易发生冲突导入/意外行为,一般来说,跟踪事情/调试变得更加困难。
e.g。 - 如果我们执行了import tkinter as some_name
并且我们使用了some_name.*
,其中*
将来自tkinter,您想要使用如上所述的tk.END,甚至是小部件类,它会更容易保持对...的跟踪。我们知道完全所有内容都来自。
如果你有一个大目录,那么这样的迭代将阻止Tk的主事件循环。请考虑使用单独的线程。