Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ttk.Treeview&x27;点击ttk.Radiobutton后s宽度增加_Python_Python 3.x_Tkinter_Ttk_Ttkwidgets - Fatal编程技术网

Python ttk.Treeview&x27;点击ttk.Radiobutton后s宽度增加

Python ttk.Treeview&x27;点击ttk.Radiobutton后s宽度增加,python,python-3.x,tkinter,ttk,ttkwidgets,Python,Python 3.x,Tkinter,Ttk,Ttkwidgets,我一直在用python使用tkinter和tkinter.ttk制作这个下载程序,并在该程序中添加了一个最近的功能,让用户可以查看该程序以前执行的操作的日志。它工作正常,但是,我最近发现了一个bug 我有一个设置按钮,可以创建另一个顶级,然后您可以管理默认目录,并使用三个ttk将应用程序的模式切换为灯光模式、夜间模式或自定义主题。单选按钮但每当我按下前两个单选按钮时(前两个负责将主题从亮模式切换到暗模式,反之亦然)我的ttk.treeview的宽度毫无理由地增加了1。奇怪的是,第三个单选按钮没有

我一直在用python使用tkinter和tkinter.ttk制作这个下载程序,并在该程序中添加了一个最近的功能,让用户可以查看该程序以前执行的操作的日志。它工作正常,但是,我最近发现了一个bug


我有一个设置按钮,可以创建另一个顶级,然后您可以管理默认目录,并使用三个ttk将应用程序的模式切换为灯光模式、夜间模式或自定义主题。单选按钮但每当我按下前两个单选按钮时(前两个负责将主题从亮模式切换到暗模式,反之亦然)我的ttk.treeview的宽度毫无理由地增加了1。奇怪的是,第三个单选按钮没有出现这种情况,它负责创建自定义模式

我尝试为日志的顶级设置一个maxsize,但这会影响ttk.treeview本身。为什么会发生这种情况?如何防止这种情况

我的应用程序的模拟(这只是一个演示,所以我没有编写完整的主题代码):

从tkinter导入*
从tkinter导入颜色选择器
从tkinter导入ttk
列=(“操作”、“URL”、“文件路径”、“状态”、“开始日期”、“结束日期”)
日志数据=[(“下载(文件)”,”https://www.youtube.com“C:/Users/Mypc/Downloads/youtube.html”、“完成”、“2021-03-30 13:15:30”、“2021-03-30 13:15:33”),
(“格式提取”https://www.youtube.com/watch?v=xxNxqveseyI“,”——“,“完成”,“2021-03-30 13:15:30”,“2021-03-30 13:15:33”)]
font\u color,bg\u color=“黑色”、“白色”
root=Tk()
root.configure(bg=bg\u颜色)
根目录。可调整大小(False,False)
night_on=IntVar(值=1)
style=ttk.style()
配置(“树视图”,行高=25,字体=('Arial',10))
style.configure(“Treeview.Heading”,font=('Arial',10))
style.configure(“TLabel”,前景=字体颜色,背景=背景颜色)
style.configure('my.TButton',font=('Helvetica',20',italic'))
配置(“TRadiobutton”,前景=字体颜色,背景=背景颜色,字体=('Arial',10))
font\U color\U var=StringVar(值=f“当前字体颜色:\t{font\U color}”)
bg_color_var=StringVar(value=f“当前背景色:\t{bg_color}”)
log_top=顶层(根)
log_top.draw()
日志顶部。可调整大小(False,False)
log\u fr=框架(log\u顶部)
日志滚动=ttk.滚动条(日志滚动,方向=垂直)
log\u tree=ttk.Treeview(log\u fr,selectmode=“browse”,yscrollcommand=log\u scroll.set,height=12,columns=columns)
log\u scroll.config(命令=log\u tree.yview)
def clear_记录():
对于日志树中的子项。获取子项()
日志树。删除(子)
clr_log_btn=ttk.按钮(log_top,text=“Clear log”,takefocus=False,style=“my.TButton”,command=Clear_记录)
日志树。列(“#0”,宽度=0,拉伸=NO)
日志树列(“操作”,宽度=100,锚定=中心)
日志树列(“URL”,宽度=100,锚点=中心)
log_tree.column(“文件路径”,宽度=100,锚点=CENTER)
日志树列(“状态”,宽度=80,锚定=中心)
日志树列(“开始日期”,宽度=126,锚点=中心)
日志树列(“结束日期”,宽度=126,锚点=中心)
对于列中的标题:
日志树标题(标题,文本=标题,锚定=中心)
对于项索引,枚举中的元素(日志数据):
log_tree.insert(父项=“”,索引=0,iid=项索引,值=元素)
日志树包(侧面=左侧)
log_scroll.pack(侧=右,填充=Y)
clr\U log\U btn.pack(侧面=底部,填充=X)
日志文件包()
log\u top.protocol(“WM\u DELETE\u WINDOW”,log\u top.draw)
log\u lbl=Label(root,text=“Show log”,fg=“blue”,bg=bg\u color,cursor=“hand2”)
def显示日志(事件):
如果log_top.state()=“撤回”:
log_top.deiconify()
elif log_top.state()=“正常”:
log\u top.focus\u set()
def设置_win():
设置顶部=顶部(根,背景=背景颜色)
可调整大小的设置(False,False)
def set_night():
全局背景颜色、字体颜色
bg_color=“黑色”
font\u color=“白色”
设置\u top.config(bg=bg\u颜色)
style.configure(“TLabel”,前景=字体颜色,背景=背景颜色)
配置(“TRadiobutton”,前景=字体颜色,背景=背景颜色)
def设置_灯():
全局背景颜色、字体颜色
bg_color=“白色”
font\u color=“黑色”
设置\u top.config(bg=bg\u颜色)
style.configure(“TLabel”,前景=字体颜色,背景=背景颜色)
配置(“TRadiobutton”,前景=字体颜色,背景=背景颜色)
def set_custom():
全局字体颜色,背景颜色
颜色=顶层(根,背景=背景颜色)
可调整大小的颜色(假、假)
当前字体颜色=ttk.Label(颜色\u fr,文本变量=字体颜色\u变量)
当前颜色=ttk.Label(颜色\U fr,文本变量=背景颜色\U var)
def更改颜色(名称):
全局字体颜色,背景颜色
new_color=colorchooser.askcolor()[1]
如果“新颜色”不是“无”:
如果名称==“字体”:
字体颜色=新颜色
字体颜色变量集(f“当前字体颜色:\t{font\u color}”)
style.configure(“TLabel”,前台=font\u颜色)
配置(“TRadiobutton”,前景=字体颜色)
elif名称==“bg”:
bg_颜色=新_颜色
bg_color_var.set(f“当前背景色:\t{bg_color}”)
颜色配置(bg=bg\u颜色)
style.configure(“TLabel”,背景=bg_颜色)
样式配置(“TRadiobutton”,背景=背景颜色)
change\u font=ttk.按钮(color\u fr,text=“change!”,command=lambda:change\u color(“font”),
takefocus=False)
change\u bg=ttk.按钮(color\u fr,text=“change!”,command=lambda:change\u color(“bg”),takefocus=False)
当前字体颜色网格(行=0,列=0,pady=(10,0),padx=5)
更改字体网格(行=0,列=1,padx=(0,7))
现任博格公司
from tkinter import *
from tkinter import colorchooser
from tkinter import ttk

columns = ("Operation", "URL", "File Path", "Status", "Start Date", "End Date")
log_data = [("Download (File)", "https://www.youtube.com", "C:/Users/Mypc/Downloads/youtube.html", "Finished", "2021-03-30 13:15:30", "2021-03-30 13:15:33"),
            ("Format Fetch", "https://www.youtube.com/watch?v=xxNxqveseyI", "------", "Finished", "2021-03-30 13:15:30", "2021-03-30 13:15:33")]
font_color, bg_color = "black", "white"
root = Tk()
root.configure(bg=bg_color)
root.resizable(False, False)
night_on = IntVar(value=1)
style = ttk.Style()
style.configure("Treeview", rowheight=25, font=('Arial', 10))
style.configure("Treeview.Heading", font=('Arial', 10))
style.configure("TLabel", foreground=font_color, background=bg_color)
style.configure('my.TButton', font=('Helvetica', 20, 'italic'))
style.configure("TRadiobutton", foreground=font_color, background=bg_color, font=('Arial', 10))
font_color_var = StringVar(value=f"Current font color:  \t  {font_color}")
bg_color_var = StringVar(value=f"Current background color:  \t  {bg_color}")
log_top = Toplevel(root)
log_top.withdraw()
log_top.resizable(False, False)
log_fr = Frame(log_top)
log_scroll = ttk.Scrollbar(log_fr, orient=VERTICAL)
log_tree = ttk.Treeview(log_fr, selectmode="browse", yscrollcommand=log_scroll.set, height=12, columns=columns)
log_scroll.config(command=log_tree.yview)


def clear_records():
    for child in log_tree.get_children():
        log_tree.delete(child)


clr_log_btn = ttk.Button(log_top, text="Clear Log", takefocus=False, style="my.TButton", command=clear_records)
log_tree.column("#0", width=0, stretch=NO)
log_tree.column("Operation", width=100, anchor=CENTER)
log_tree.column("URL", width=100, anchor=CENTER)
log_tree.column("File Path", width=100, anchor=CENTER)
log_tree.column("Status", width=80, anchor=CENTER)
log_tree.column("Start Date", width=126, anchor=CENTER)
log_tree.column("End Date", width=126, anchor=CENTER)

for head in columns:
    log_tree.heading(head, text=head, anchor=CENTER)

for item_indices, element in enumerate(log_data):
    log_tree.insert(parent='', index=0, iid=item_indices, values=element)


log_tree.pack(side=LEFT)
log_scroll.pack(side=RIGHT, fill=Y)
clr_log_btn.pack(side=BOTTOM, fill=X)
log_fr.pack()
log_top.protocol("WM_DELETE_WINDOW", log_top.withdraw)
log_lbl = Label(root, text="Show Log", fg="blue", bg=bg_color, cursor="hand2")


def show_log(event):
    if log_top.state() == "withdrawn":
        log_top.deiconify()
    elif log_top.state() == "normal":
        log_top.focus_set()


def settings_win():
    settings_top = Toplevel(root, bg=bg_color)
    settings_top.resizable(False, False)

    def set_night():
        global bg_color, font_color
        bg_color = "black"
        font_color = "white"
        settings_top.config(bg=bg_color)
        style.configure("TLabel", foreground=font_color, background=bg_color)
        style.configure("TRadiobutton", foreground=font_color, background=bg_color)

    def set_light():
        global bg_color, font_color
        bg_color = "white"
        font_color = "black"
        settings_top.config(bg=bg_color)
        style.configure("TLabel", foreground=font_color, background=bg_color)
        style.configure("TRadiobutton", foreground=font_color, background=bg_color)

    def set_custom():
        global font_color, bg_color
        color_fr = Toplevel(root, bg=bg_color)
        color_fr.resizable(False, False)
        current_font_color = ttk.Label(color_fr, textvariable=font_color_var)
        current_bg_color = ttk.Label(color_fr, textvariable=bg_color_var)

        def change_color(name):
            global font_color, bg_color
            new_color = colorchooser.askcolor()[1]
            if new_color is not None:
                if name == "font":
                    font_color = new_color
                    font_color_var.set(f"Current font color:  \t  {font_color}")
                    style.configure("TLabel", foreground=font_color)
                    style.configure("TRadiobutton", foreground=font_color)
                elif name == "bg":
                    bg_color = new_color
                    bg_color_var.set(f"Current background color:  \t  {bg_color}")
                    color_fr.config(bg=bg_color)
                    style.configure("TLabel", background=bg_color)
                    style.configure("TRadiobutton", background=bg_color)

        change_font = ttk.Button(color_fr, text="Change! ", command=lambda: change_color("font"),
                                 takefocus=False)
        change_bg = ttk.Button(color_fr, text="Change! ", command=lambda: change_color("bg"), takefocus=False)
        current_font_color.grid(row=0, column=0, pady=(10, 0), padx=5)
        change_font.grid(row=0, column=1, padx=(0, 7))
        current_bg_color.grid(row=1, column=0, pady=(10, 0), padx=5)
        change_bg.grid(row=1, column=1, padx=(0, 7))

    night_mode = ttk.Radiobutton(settings_top, text="Night Mode", variable=night_on, value=0,
                                 command=set_night, takefocus=False)
    light_mode = ttk.Radiobutton(settings_top, text="Light Mode", variable=night_on, value=1,
                                 command=set_light, takefocus=False)
    custom_mode = ttk.Radiobutton(settings_top, text="Custom Mode", variable=night_on, value=2,
                                  command=set_custom, takefocus=False)

    night_mode.grid(row=0, column=0)
    light_mode.grid(row=1, column=0)
    custom_mode.grid(row=2, column=0)


log_lbl.bind("<Button-1>", show_log)
log_lbl.pack(side=LEFT, pady=30, padx=30)
settings_btn = ttk.Button(root, text="Open Settings", takefocus=False, command=settings_win)
settings_btn.pack(side=RIGHT, padx=30, pady=30)
root.focus_set()
root.mainloop()
import tkinter as tk
from tkinter import ttk

columns = ("1", "2", "3")
font_color, bg_color = "black", "white"

def change_theme():
    global bg_color, font_color
    # Switches the values of `bg_color` and `font_color`
    bg_color, font_color = font_color, bg_color
    root.config(bg=bg_color)
    style.configure("TLabel", fg=font_color, bg=bg_color)


root = tk.Tk()

style = ttk.Style()

tree = ttk.Treeview(root, columns=columns)
tree.pack()

button = tk.Button(root, text="Click me", command=change_theme)
button.pack()

root.mainloop()