我已经阅读了许多线程和其他资源,试图找到正确的方法来处理此问题,但是我没有找到适合我的应用程序的任何内容。 这是我要完成的工作。
查询完成并且将数据插入到列表框后,我似乎无法用1个字符的空间将数据插入到空白位置。
我正在使用pack(),并且已经阅读了tkinter手册,并尝试了每个可用示例以及在各个线程上找到的其他示例。
小部件:
output = tkinter.Listbox(window_2, height = 20, font='Times 10',
width=42, bd=1, bg = '#FFD599', fg = '#9A0615', selectmode=SINGLE)
output.pack()
output.place(x=210, y=195)
我尝试用pack()进行padx和pady的操作都没有成功,尽管它可以与Text小部件一起使用。我还尝试使用了一些我在网站上找到的替代方法,但是在插入数据时,所有这些方法都没有成功地使列表框成为空白。
有什么建议吗?
答案 0 :(得分:0)
pack
的{{1}}和padx/pady
选项不会影响列表框中的数据。列表框本身没有任何添加内部边距的选项。
要在列表框的内部留出一定的空白,我通常要做的是将其ipadx/ipady
和borderwidth
设为零,然后将其放置在具有相同背景色的框架中,边框是边界。然后,您可以在边框和列表框之间添加所需的任何填充。
这也很方便,因为您可以在框架内放置一个滚动条,使它看起来像是在列表框内,而实际上不在列表框内。
示例:
highlightthickness
答案 1 :(得分:0)
首先要在tkinter列表框中格式化字符,您需要使用固定字体和.format python函数。...;
因此您可以执行此操作
按“加载”以将数据加载到列表框中,并注意该行代码
s ='{0:> 8} {1:5}'。format(i [0],i [1])
self.list.insert(tk.END,s)
import tkinter as tk
RS = (('Apple',10),
('Banana',20),
('Peack',8),
('Lemon',6),)
class App(tk.Frame):
def __init__(self,):
super().__init__()
self.master.title("Hello World")
self.init_ui()
def init_ui(self):
self.pack(fill=tk.BOTH, expand=1,)
f = tk.Frame()
sb = tk.Scrollbar(f,orient=tk.VERTICAL)
self.list = tk.Listbox(f,
relief=tk.GROOVE,
selectmode=tk.BROWSE,
exportselection=0,
background = 'white',
font='TkFixedFont',
yscrollcommand=sb.set,)
sb.config(command=self.list.yview)
self.list.pack(side=tk.LEFT,fill=tk.BOTH, expand =1)
sb.pack(fill=tk.Y, expand=1)
w = tk.Frame()
tk.Button(w, text="Load", command=self.on_callback).pack()
tk.Button(w, text="Close", command=self.on_close).pack()
f.pack(side=tk.LEFT, fill=tk.BOTH, expand=0)
w.pack(side=tk.RIGHT, fill=tk.BOTH, expand=0)
def on_callback(self,):
for i in RS:
s = '{0:>8}{1:5}'.format(i[0],i[1])
self.list.insert(tk.END, s)
def on_close(self):
self.master.destroy()
if __name__ == '__main__':
app = App()
app.mainloop()
答案 2 :(得分:0)
这是布莱恩·奥克利(Bryan Oakley)广受赞赏的答案的一种变化。
'
import tkinter as tk
from tkinter import ttk
try: # allows the text to be more crisp on a high dpi display
from ctypes import windll
windll.shcore.SetProcessDpiAwareness(1)
except:
pass
root = tk.Tk()
oStyle = ttk.Style()
oStyle.theme_use("clam")
oStyle.configure('LB.TFrame', bd=1, relief="sunken", background="white")
listbox_border = ttk.Frame(root, style='LB.TFrame')
listbox_border.pack(padx=4, pady=4, fill=None, expand=False)
vsb = ttk.Scrollbar(listbox_border)
vsb.pack(side="right", fill="y")
listbox = tk.Listbox(listbox_border, width=20, height=10, borderwidth=0,
highlightthickness=0, selectmode=tk.SINGLE,
activestyle=tk.NONE)
listbox.pack(padx=6, pady=6, fill="y", expand=True)
listbox.config(yscrollcommand=vsb.set)
vsb.config(command=listbox.yview)
for i in range(100):
listbox.insert("end", "Item #{}".format(i))
root.mainloop()