Python 使用嵌套框架在tkinter中水平滚动列
我正在使用Python 使用嵌套框架在tkinter中水平滚动列,python,tkinter,listbox,grid-layout,scrollable,Python,Tkinter,Listbox,Grid Layout,Scrollable,我正在使用网格几何体管理器创建具有以下小部件结构的表: 第0列和第1列中的单选按钮 第2列中的水平可滚动文本(表示可能较长的文件名) 以及第6列中的进度条(第3-5列的数值将在后面填写) 是水平滚动的文本给我带来了麻烦。我尝试创建一个Listbox小部件,该小部件位于第2列(作为整个框架的子项)并跨越所有行。这似乎很有希望,直到Listbox中的文本行与父网格中的行明显不对齐为止 我一直在徒劳地寻找一种方法来填充列表框中的每一行文本,以便行匹配;但即使这是可能的,我还是希望有一个更一般、不那
网格
几何体管理器创建具有以下小部件结构的表:
- 第0列和第1列中的单选按钮
- 第2列中的水平可滚动文本(表示可能较长的文件名)
- 以及第6列中的进度条(第3-5列的数值将在后面填写)李>
文本给我带来了麻烦。我尝试创建一个Listbox
小部件,该小部件位于第2列(作为整个框架的子项)并跨越所有行。这似乎很有希望,直到Listbox中的文本行与父网格中的行明显不对齐为止
我一直在徒劳地寻找一种方法来填充列表框中的每一行文本,以便行匹配;但即使这是可能的,我还是希望有一个更一般、不那么麻烦的解决方案
有没有一种简单的方法可以让我缺少的一列可以滚动?setGrid是一个可能的解决方案吗
(要查看下面代码的问题,请使用选择文件
或选择文件夹
按钮将多个音频文件加载到文件列表中。)
很好的建议,林兹勒,谢谢。你应该发布一个工作示例,这样我们就可以尝试一下,并准确地了解你的情况。您还应该使用4个空格进行缩进,这是推荐的。
#! /usr/bin/env python
#################################################
# This tool allows the user to select audio files
# (or folders containing audio files) and subject
# them to loudness analysis.
#################################################
import sys
import os
import codecs
import re
import Tkinter
from Tkinter import *
import tkFileDialog
from os import walk
from os import path
from Tkinter import Tk, Text, BOTH, W, N, E, S
from ttk import Frame, Button, Label, Style, Progressbar
from ScrolledText import *
from progressbar import ProgressBar
class Leveler_tk(Frame):
fileList = []
allowedExtensions = ['mp3','mp2','m4a','aiff','wav']
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initialize()
def initialize(self):
self.style = Style()
self.style.theme_use("default")
self.pack(fill=BOTH, expand=1)
self.columnconfigure(1, weight=1)
self.columnconfigure(2,weight=1)
self.columnconfigure(2,pad=250)
self.columnconfigure(3, weight=1)
self.columnconfigure(4, weight=1)
self.columnconfigure(5, weight=1)
lbl1 = Label(self, text="Analyze")
lbl1.grid(pady=4, padx=5,row=0,column=0)
lbl2 = Label(self, text="Adjust")
lbl2.grid(pady=4, padx=5,row=0,column=1)
lbl3 = Label(self, text="File")
lbl3.grid(pady=4, padx=5,row=0,column=2)
lbl4 = Label(self, text="Integrated\nLoudness")
lbl4.grid(pady=4, padx=5,row=0,column=3)
lbl5 = Label(self, text="LRA")
lbl5.grid(pady=4, padx=5,row=0,column=4)
lbl6 = Label(self, text="Peak")
lbl6.grid(pady=4, padx=5,row=0,column=5)
lbl7 = Label(self, text="Progress")
lbl7.grid(pady=4, padx=5,row=0,column=6)
lbl8 = Label(self, text="Meets\nSpecs?")
lbl8.grid(sticky=W, pady=4, padx=5,row=0,column=7)
file_btn = Button(self, text="Select File",command=self.selectFile)
file_btn.grid(row=1,rowspan=2, column=8,padx=5,pady=4)
folder_btn = Button(self, text="Select Folder", command=self.selectFolder)
folder_btn.grid(row=3, rowspan=2, column=8,padx=5,pady=4)
def render(self):
count = 0
filebox = Listbox(self,selectmode=EXTENDED,setgrid=1)
scrollbar = Scrollbar(filebox, orient=HORIZONTAL)
scrollbar.config(command=filebox.xview)
filebox.grid(row=1, column=2, rowspan=len(self.fileList), columnspan=1, sticky=N+S+E+W)
filebox.config(xscrollcommand=scrollbar.set)
scrollbar.pack(side=BOTTOM, fill=X)
for file in self.fileList:
analyze = IntVar()
adjust = IntVar()
Radiobutton(self, text="", variable=analyze, value=count, borderwidth=0).grid(row=count+1, column=0)
Radiobutton(self, text="", variable=adjust, value=count, borderwidth=0).grid(row=count+1, column=1)
filebox.insert(END, file + "\n")
Progressbar(self, orient=HORIZONTAL,length=100, mode='determinate').grid(row=count+1, column=6)
count += 1
def addToList(self, name):
dot = re.search("\.(?=[^.]*$)",name)
extension = name[dot.end():]
if extension in self.allowedExtensions and not name in self.fileList:
self.fileList.append(name)
def selectFile(self):
input = tkFileDialog.askopenfilename(filetypes = [('MP3', '*.mp3'), ('MP2', '*.mp2'), ('M4A', '*.m4a'), ('AIFF', '*.aiff'), ('WAV', '*.wav')], multiple = 1)
for el in input:
if os.path.isfile(el) and ".DS_Store" not in el:
try:
self.addToList(el)
except:
tkMessageBox.showerror("Some error")
self.render()
def selectFolder(self):
input = tkFileDialog.askdirectory()
for (dirpath, dirnames, filenames) in walk(input):
for name in filenames:
if name != ".DS_Store":
self.addToList(dirpath + "/" + name)
self.render()
def main():
root = Tk()
app = Leveler_tk(root)
root.mainloop()
if __name__ == "__main__":
main()