我需要关于如何正确使用一些帮助os.path.split
与tkinters scrolledtext
我尝试使用split
与(头/尾)以不同的方式部分,但我不知道如何使它工作。主要是关于如何将其输出到一个字符串文本,可以改变和用户输入的更新。这将是下就行了,但现在我需要得到这个split
部分的工作。
from tkinter import filedialog, Tk, Button, Label, Grid, Entry,
scrolledtext
from os import path
import os
# FUNCTIONS
def browseFunc():
filename = filedialog.askopenfilename()
dirname = os.path.dirname(os.path.split(usermod, filename))
pathlabel.config(text='current path %s' % dirname)
# START
root = Tk()
# BROWSE BUTTON
browseButton = Button (root, text="Browse", command=browseFunc)
browseButton.grid(row=0, column=0)
# BROWSE BUTTON OUTPUT
pathlabel = Label(root)
pathlabel.grid(row=0, column=1)
# END
root.mainloop()
如果tkinter不适合用于我想要的东西,请告诉我。
用户:选择文件→H:\SteamLibrary\SteamApps\common\SourceFilmmaker\game\usermod\models\nitpick\test\test.dmx
滚动文字:
$ modelname“ nitpick\test\test
。mdl” ←输入askfilename并自动完成滚动文本,在末尾添加.mdl
$体 “主体” “test.dmx
” 的←只有选定的文件
$ cdmaterials “nitpick\test
” 的←假定纹理是在材料中夹,而不是模型
$序列 “空闲”, “test.dmx
” 环fps的30的←只有选定的文件
我发现一种叫做argparse
,它的声音有前途的。我不知道这是否会帮助我,我想要做的。
还可以在scrollingtext
的特定行上打印字符串吗?
答案 0 :(得分:1)
在我看来,你的问题,从错误使用os.path.dirname和os.path.split这样的出现。从本质上讲,它们是互补的
os.path.dirname(path) = os.path.split(path)[0]
此外,您似乎将两个参数传递给os.path.split,而根据python参考,它仅接受一个参数。
答案 1 :(得分:1)
os.path.split
只有一个参数:
>>> os.path.split('foo/bar')
('foo', 'bar')
它所做的是分裂除了“文件名”部分中的“含有目录”部分,所以在这里将含目录为foo
,并且文件名是bar
。没有文件扩展名的概念,文件名中可以包含任意数量的点,例如bar.tex.txt.tar.gz
就是 name bar.tex.txt.tar.gz
:< / p>
>>> os.path.split('bar.tex.txt.tar.gz')
('', 'bar.tex.txt.tar.gz')
这里没有包含目录的部分,因此为空。
Tkinter的filename = filedialog.askopenfilename()
的结果似乎始终是现有文件的完整路径名(这是基于快速实验,没有任何文档; the documentation appears to be a bit thin),因此在{{1 }}你应该始终有一个非空目录部分和文件名部分。但是,如果你想要的是取代最后os.path.split
扩展与.abc
,认为正是这样做的,而无需调用.def
在所有的:
os.path.split
如果您希望限制匹配的扩展名,可以使用>>> filename = 'some arbitrary/name.with.dots/ending with foo.abc'
>>> os.path.splitext(filename)[0] + '.def'
'some arbitrary/name.with.dots/ending with foo.def'
的参数来实现。该文档暗示filedialog.askopenfilename()
如果用户按下“取消”,则返回一个空字符串。然而,这似乎是真实的只有至少一个成功的选择后,的:相反,它返回一个空的组的为第一个“取消”。因此,最好使用filedialog.askopenfilename()
对此进行测试:
if not filename
顺便说一句,pathlib对于您似乎正在做的事情来说有点笨重,但这是表达您可能要对路径进行的所有类型操作的一种便捷方法。