AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[tkinter](coding)

Martin Hope
Pedroski
Asked: 2025-04-23 13:26:23 +0800 CST

tkinter 按钮是否应始终以变量作为名称?

  • 5

我可以制作一个这样的 tkinter 按钮:

button1 = ttk.Button(root, text = "Button 1", command=lambda: button_click(button1))

或者像这样循环:

tk.Button(root, text=f"Button {i}", command=lambda x=i: button_click(x)).pack()

但是第二个按钮没有像 button1 那样的变量名。因此,我无法通过名称访问它:

def button_click(button):
        button_text = button.cget('text')
        ttk.Label(root, text = button_text).pack()

或者在这样的循环中创建时,第二个按钮实际上是否具有 tkinter 默认名称?

tkinter
  • 1 个回答
  • 22 Views
Martin Hope
sendog3c
Asked: 2024-11-30 11:51:28 +0800 CST

使用 tkinter 中的条目进行过滤时显示条纹行标签

  • 5

我希望在使用 tkinter 中的条目进行过滤时,我的 Treeview 能够显示条纹行标记。代码在过滤之前运行良好,过滤函数也运行良好,但它不显示条纹行标记。有人可以帮忙解决它。我认为根据对 Python 和 tkinter 的了解程度,那里一定有无用的代码。代码如下:

问题在于 def execute_search(event) 函数:

#import modules 
from tkinter import *
from tkinter import ttk

#Load data
Data = [
        ["John", "Elder", 1, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"], 
        ["Johny", "Elder", 2, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["Joe", "Elder", 3, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["marty", "Elder", 4, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["don", "Elder", 5, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["mike", "Elder", 6, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["Paula", "Elder", 7, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["Vianney", "Elder", 8, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["Mariana", "Elder", 9, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["Ignacio", "Elder", 10, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["Paul", "Elder", 11, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["Pablo", "Elder", 12, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["Pedro", "Elder", 13, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["Pascal", "Elder", 14, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
        ["Peter", "Elder", 15, "3223 NE 36Th", "Fort Lauderdale", "Florida", "33308"],
       ]

#create a window
root = Tk()

root.title('Users List')
#root.iconbitmap()
root.geometry("1000x500")

#Add some style
style = ttk.Style()

#Pick a Theme
style.theme_use('default')

#Configure the Treeview color
style.configure("Treeview", 
                bakground="#D3D3D3",
                FOREGROUND="black",
                rowheight=25,
                fieldbackground="#D3D3D3")

#Change selected color
style.map('Treeview', 
          bakground=[('selected', "#D347083")])

#Create the Treeview Frame
tree_frame = Frame(root)
tree_frame.pack(pady=10)

#Create the Treeview Scrollbar
tree_scroll = Scrollbar(tree_frame)
tree_scroll.pack(side=RIGHT, fill=Y)

#Create the Treeview
my_tree = ttk.Treeview(tree_frame, yscrollcommand=tree_scroll.set, selectmode="extended")
my_tree.pack()

#Configure Scrollbar
tree_scroll.config(command=my_tree.yview)

#Defining Columns
my_tree['columns'] = ("First Name", "Last Name", "ID", "Address", "City", "State", "Zipcode")

#Formating our columns
my_tree.column("#0", width=0, stretch=NO)
my_tree.column("First Name", anchor=W, width=140)
my_tree.column("Last Name", anchor=W, width=140)
my_tree.column("ID", anchor=CENTER, width=100)
my_tree.column("Address", anchor=CENTER, width=140)
my_tree.column("City", anchor=CENTER, width=140)
my_tree.column("State", anchor=CENTER, width=140)
my_tree.column("Zipcode", anchor=CENTER, width=140)

#Creating headings
my_tree.heading("#0", text="", anchor=W)
my_tree.heading("First Name", text="First Name", anchor=W)
my_tree.heading("Last Name", text="Last Name", anchor=W)
my_tree.heading("ID", text="ID", anchor=CENTER)
my_tree.heading("Address", text="Address", anchor=CENTER)
my_tree.heading("City", text="City", anchor=CENTER)
my_tree.heading("State", text="State", anchor=CENTER)
my_tree.heading("Zipcode", text="Zipcode", anchor=CENTER)

#Add our data to the screen
global count
count = 0


for record in Data:
       if count % 2 == 0:
            my_tree.insert(parent='', index='end', iid=count, text='', values=(record[0], 
            record[1], record[2], record[3], record[4], record[5], record[6]), tags= 
            ('evenrow',))
       else:    
            my_tree.insert(parent='', index='end', iid=count, text='', values=(record[0], 
            record[1], record[2], record[3], record[4], record[5], record[6]), tags= 
            ('oddrow',))
            #increment counter
            count +=1
            #print(record)


#create a frame
data_frame = LabelFrame(root, text="Record")
data_frame.pack(fill="x", expand="yes", padx=20)

#create the entry
fn_label = Label(data_frame, text="First Name")
fn_label.grid(row=0, column=0, padx=10)
fn_entry = Entry(data_frame)
fn_entry.grid(row=0, column=1, padx=10)

#function to filter data
def execute_search(event):

       global count
       count = 0 

       query = fn_entry.get().lower()
       print(query)
       for item in my_tree.get_children():
              my_tree.delete(item)

       data_list = []
       for item in Data:
              if query in item[0].lower():
                     my_tree.insert("", "end", values=item)
              for item in Data:
                     data_list.append(item)
                
#Create straped row tags
my_tree.tag_configure('oddrow', background="white")
my_tree.tag_configure('evenrow', background="lightblue")


#Not in use
def query_database():

        global count
        count = 0    

        for record in Data:
                if count % 2 == 0:
                        my_tree.insert(parent='', index='end', iid=count, text='', values= 
                        (record[0], record[1], record[2], record[3], record[4], record[5], 
                        record[6]), tags=('evenrow',))
                else:    
                        my_tree.insert(parent='', index='end', iid=count, text='', values= 
                        (record[0], 
                        record[1], record[2], record[3], record[4], record[5], record[6]), 
                        tags=('oddrow',))
                        #increment counter
                        count +=1
                        #print(record)

fn_entry.bind('<KeyRelease>', execute_search)


root.mainloop()
tkinter
  • 1 个回答
  • 26 Views
Martin Hope
Psionman
Asked: 2024-08-27 16:33:13 +0800 CST

Tkinter treeview - 获取 <ButtonPress-1> 上光标下的项目

  • 5

我正在编写一个拖放应用程序,其中我将数据从树视图拖到输入小部件。我希望能够在按下鼠标按钮时使用光标下方的树中的项目。

我知道如何获取所选项目,但在事件发生时该项目并未返回

有没有什么办法可以退货?

import tkinter as tk
from tkinter import ttk

def main() -> None:
    root = tk.Tk()
    root.title('Tree coords')

    tree = ttk.Treeview(root, height=30, show='headings',)
    tree.grid(row=0, column=0, sticky=tk.NSEW)
    tree.bind("<ButtonPress-1>", on_start)

    col_list = ('Names', 'Names', 30)
    tree['columns'] = col_list

    for name in ['ab', 'ef', 'mn']:
        values = (name)
        tree.insert('', 'end', values=values)

    root.mainloop()

def on_start(event=None):
    widget = event.widget
    selected_items = widget.selection()
    x, y = event.widget.winfo_pointerxy()
    print(x, y, selected_items)

if __name__ == '__main__':
    main()
tkinter
  • 1 个回答
  • 38 Views
Martin Hope
Paul-ET
Asked: 2024-08-15 20:03:22 +0800 CST

使用网格布局管理器将滚动条设置到左侧

  • 5

我读到,你可以在 .pack() 布局管理器中将滚动条放在左侧,但我找不到 .grid() 布局管理器的有效解决方案。我的书中的描述说我应该使用它sticky = 'nsw'来定位。然后我尝试将其移到左侧,请参阅我的示例。

这没有任何效果:

import tkinter as tk
from tkinter import ttk
from pathlib import Path

root = tk.Tk()

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

paths = Path('.').glob('**/*')

tv = ttk.Treeview(root, columns=['size','modified'], selectmode=None)

tv.heading('#0', text='Name')
tv.heading('size', text='Size', anchor='center')
tv.heading('modified', text='Modifies', anchor='center')

tv.column('#0', stretch = True, anchor='w')
tv.column('size', width=100, anchor='center') 
tv.column('modified',anchor='center')

tv.grid_rowconfigure(0, weight=1)
tv.grid_columnconfigure(0, weight=1) 
tv.grid(row=0, column=0, sticky='nsew')
#tv.pack(expand=True, fill='both')

for path in paths:
    meta = path.stat()
    parent = str(path.parent)
    if parent == '.':
        parent = ''
               
    tv.insert(parent, 'end', iid=str(path), text=str(path.name), values=[meta.st_size, meta.st_mtime])

scrollbar = ttk.Scrollbar(root, orient=tk.VERTICAL, command=tv.yview)
tv.configure(yscrollcommand=scrollbar.set)
scrollbar.grid(row=0, column=1, sticky='nse') #scrollbar goes not to the left!
        
root.mainloop()

在树形视图中是否无法将滚动条定位到窗口的左侧?

tkinter
  • 1 个回答
  • 20 Views
Martin Hope
Math
Asked: 2024-06-28 12:14:18 +0800 CST

如何使应用程序在 customtkinter 中响应?

  • 7

我想创建一个“提交”按钮并将其放置在应用程序的中心。请查看代码和图片在此处输入图片描述

import tkinter as tk  # stick to one logic using tk or Tkinter!
from tkinter import ttk


class GUI(tk.Tk):
    def __init__(self):
        super().__init__()  # this basically replaces window as self
        self.title("Example")
        self.minsize(width=600, height=400)  # do not allow resizing smaller than your initial canvas size
        max_height = 1000  # use this to determine length of scroll heigth and if desired max window heigth
        #self.maxsize(width=650, height=max_height)  # → specify if needed

        main_frame = tk.Frame(self)  # name it more descriptive
        main_frame.pack(expand=True, fill="both")  # let the canvas parent frame stretch out when resizing

        # let the canvas expand to fill main_frame both in width and height
        main_frame.rowconfigure(0, weight=1)
        main_frame.columnconfigure(0, weight=1)

        # scrollregion is also essential when using scrollbars → but you only need y in your case!
        self.canvas = tk.Canvas(main_frame, scrollregion=f"0 0 0 {max_height}", width=600, height=400)
        self.canvas.grid(row=0, column=0, sticky=tk.NSEW)

        self.scroll = tk.Scrollbar(main_frame, orient=tk.VERTICAL, command=self.canvas.yview, cursor="arrow")
        self.scroll.grid(row=0, column=1, sticky=tk.NS)
        self.canvas.config(yscrollcommand=self.scroll.set)

        ###############################

        # Saving User Info
        user_info_frame = tk.LabelFrame(main_frame, text="User Information")  # unnecessary to manage with .grid

        first_name_label = tk.Label(user_info_frame, text="First Name")
        first_name_label.grid(row=0, column=0)
        last_name_label = tk.Label(user_info_frame, text="Last Name")
        last_name_label.grid(row=0, column=1)

        first_name_entry = tk.Entry(user_info_frame)
        last_name_entry = tk.Entry(user_info_frame)
        first_name_entry.grid(row=1, column=0)
        last_name_entry.grid(row=1, column=1)

        title_label = tk.Label(user_info_frame, text="Title")
        title_combobox = ttk.Combobox(user_info_frame, values=["", "Mr.", "Ms.", "Dr."])
        title_label.grid(row=0, column=2)
        title_combobox.grid(row=1, column=2)

        age_label = tk.Label(user_info_frame, text="Age")
        age_spinbox = tk.Spinbox(user_info_frame, from_=18, to=110)
        age_label.grid(row=2, column=0)
        age_spinbox.grid(row=3, column=0)

        nationality_label = tk.Label(user_info_frame, text="Nationality")
        nationality_combobox = ttk.Combobox(user_info_frame,
                                            values=["Africa", "Antarctica", "Asia", "Europe", "North America",
                                                    "Oceania",
                                                    "South America"])
        nationality_label.grid(row=2, column=1)
        nationality_combobox.grid(row=3, column=1)

        for widget in user_info_frame.winfo_children():
            widget.grid_configure(padx=10, pady=5, sticky="nsew")  # add sticky to stretch widget to fill grid cell

        # Saving Course Info
        courses_frame = tk.LabelFrame(main_frame)  # unnecessary to manage with .grid

        registered_label = tk.Label(courses_frame, text="Registration Status")

        reg_status_var = tk.StringVar(value="Not Registered")
        registered_check = tk.Checkbutton(courses_frame, text="Currently Registered",
                                          variable=reg_status_var, onvalue="Registered", offvalue="Not registered")

        registered_label.grid(row=0, column=0)
        registered_check.grid(row=1, column=0)

        numcourses_label = tk.Label(courses_frame, text="# Completed Courses")
        numcourses_spinbox = tk.Spinbox(courses_frame, from_=0, to='infinity')
        numcourses_label.grid(row=0, column=1)
        numcourses_spinbox.grid(row=1, column=1)

        numsemesters_label = tk.Label(courses_frame, text="# Semesters")
        numsemesters_spinbox = tk.Spinbox(courses_frame, from_=0, to="infinity")
        numsemesters_label.grid(row=0, column=2)
        numsemesters_spinbox.grid(row=1, column=2)

        for widget in courses_frame.winfo_children():
            widget.grid_configure(padx=10, pady=5, sticky="nsew")

        # rowconfigure seems to make no sense except you want to stretch in height as well (but why then a scrollbar?)
        # but giving all cols the same weight will let them stretch evenly
        user_info_frame.columnconfigure(0, weight=1)
        user_info_frame.columnconfigure(1, weight=1)
        user_info_frame.columnconfigure(2, weight=1)

        courses_frame.columnconfigure(0, weight=1)
        courses_frame.columnconfigure(1, weight=1)
        courses_frame.columnconfigure(2, weight=1)

        self.print_button = tk.Button(main_frame, text="Submit", bg='green', fg='white',font=12)

        # add the pady and padx in the position tuple & specify width for the frames by callback
        self.padx = 20
        self.canvas.create_window((self.padx, 10), anchor=tk.NW, window=user_info_frame, tags='frame')
        self.canvas.create_window((self.padx, 160), anchor=tk.NW, window=courses_frame, tags='frame')
        self.canvas.create_window((500, 350), anchor=tk.NW, window=self.print_button, tags="button")

        self.canvas.bind("<Configure>", self.onCanvasConfigure)

    def onCanvasConfigure(self, e):
        """stretch canvas frames to match canvas width on resize (respecting the scrollbar and the padding)"""
        self.canvas.itemconfig('frame', width=self.canvas.winfo_width() - self.padx - self.scroll.winfo_width())


if __name__ == '__main__':
    app = GUI()
    app.mainloop()

但是,当我最小化/最大化应用程序时,“提交”按钮不再位于中心。

我想问一下是否有办法在应用程序最大化/最小化时自动将“提交”按钮置于中央。

请参阅上面发布的代码

tkinter
  • 1 个回答
  • 33 Views
Martin Hope
dbjock
Asked: 2024-01-20 06:40:47 +0800 CST

无法 .bind("<<TreeviewSelect>>".. 与 TableView 一起获取选定的行数据

  • 5

我试图在 ttkbootstrap Tableview 中获取所选行的行数据,与 tkinter treeview 一样,我总是只使用 .bind("<>",my_func) ,而 my_func 将继续完成这项工作。

这是我使用的代码,当从表视图中选择一行时,没有迹象表明 on_tv_select 运行。在这种情况下,我不清楚如何获取所选行的数据。

import tkinter as tk
import ttkbootstrap as ttk
from ttkbootstrap.tableview import Tableview

def on_tv_select(event):
    print(f".. I was selected")

if __name__ == '__main__':
    colData = [{'text': 'carID', 'stretch': True},
               {'text': 'Make', 'stretch': True},
               {'text': 'Model', 'stretch': True}]
    rowData = [(1,'Make ZZ', 'Model BA'),
               (2,'Make DD', 'Model Ed'),
               (3,'Z Dude','That other')]
    mainWindow = tk.Tk()
    mainWindow.title("POC-Main Window")

    myTableView = Tableview(master=mainWindow,coldata=colData,rowdata=rowData,paginated=True,searchable=True,bootstyle='primary')
    myTableView.pack(fill='both', expand=True, padx=10, pady=10)
    myTableView.bind("<<TreeviewSelect>>",on_tv_select)
    mainWindow.mainloop()

我确实看到了这篇文章How do I getcontents of selected row using Python and ttkbootstrap's tableview? 这表明bind_all绑定到所有小部件会给我的应用程序带来更多问题。

tkinter
  • 1 个回答
  • 27 Views
Martin Hope
Ann Aleshkina
Asked: 2023-12-18 06:32:55 +0800 CST

Tkinter focus_set() 在框架上?

  • 5

我使用 Tkinter(实际上是 customtkinter,如果它很重要的话)。我需要的是一个键绑定(例如转义键)。它必须在不同的框架中以不同的方式工作,并且在某些框架中我不需要它。我使用框架系统作为某种选项卡。根据其他主题中的答案,我假设框架默认情况下没有按键事件绑定,并且 ppl 建议编写 frame.focus_set()为能够绑定键盘按钮。但这个漂亮的解决方案对我没有帮助。但对我来说最大的谜团是为什么这个例子运行良好:

from tkinter import *

main = Tk()

def leftKey(event):
    print ("Left key pressed")

def rightKey(event):
    print ("Right key pressed")

frame = Frame(main, width=100, height=100)
frame.bind('<Left>', leftKey)
frame.bind('<Right>', rightKey)
frame.focus_set()
frame.pack()
main.mainloop()

而且我的代码忽略了转义按钮:(警告!我知道我的代码风格很糟糕,请不要侮辱)

class MainFrame(customtkinter.CTkFrame):
    def __init__(self, master, **kwargs):
        super().__init__(master, corner_radius=0, **kwargs)

'''some code'''

class WorldInfoFrame(MainFrame):
    def __init__(self, master):
        super().__init__(master)

        '''some code'''

        self.bind("<Escape>", self.wrapper_info_button_pressed)
        self.focus_set()
    
    @staticmethod
    def info_button_pressed():
        print("static")
        app.world_frame.info_button_released()

    '''some code'''

    def wrapper_info_button_pressed(self, event):
        print("Wrapper")
        self.info_button_pressed()

里面的内容app.world_frame.info_button_released()并不重要,我的代码甚至不打印“Wrapper”。好吧,我希望有人可以帮助我或推动我走向正确的方向......

tkinter
  • 1 个回答
  • 28 Views
Martin Hope
Psionman
Asked: 2023-12-17 01:59:47 +0800 CST

Tkinter 允许行在窗口调整大小时填充垂直空间

  • 5

我有一个 tkinter 应用程序,包含三个主要水平区域:

  1. 标头
  2. 一系列标签和条目
  3. 一排按钮

当我水平调整窗口大小时,该应用程序运行良好:

  1. 标题保持在中心
  2. 条目扩展以填充分配的空间
  3. “保存”按钮位于左侧,“取消”按钮位于右侧

但是当我垂直调整大小时,我很高兴:

  1. 标题保持在顶部
  2. 按钮留在底部

但是,我希望条目以某种比例方式展开以填充剩余空间,而不是聚集在中心。这可能吗?

import tkinter as tk
from tkinter import ttk

PAD = 5


def _header_frame(container):
    frame = ttk.Frame(container)
    frame.grid(row=0, column=0)
    header = ttk.Label(frame, text='Header', font=('Arial', 16))
    header.grid(row=0, column=0, columnspan=2, sticky=tk.EW, padx=PAD)


def _main_frame(container):
    frame = ttk.Frame(container, style='red.TFrame')
    frame.grid(row=1, column=0, sticky=tk.EW)

    frame.rowconfigure(0, weight=1)
    frame.rowconfigure(1, weight=10)
    frame.rowconfigure(2, weight=1)

    frame.columnconfigure(0, weight=1)
    frame.columnconfigure(1, weight=5)

    label = ttk.Label(frame, text='label 1')
    label.grid(row=0, column=0, sticky=tk.NE, padx=PAD)

    entry = ttk.Entry(frame)
    entry.grid(row=0, column=1, sticky=tk.EW, padx=PAD)

    padding = ttk.Label(frame, text='')
    padding.grid(row=1, column=0)

    label = ttk.Label(frame, text='label 2')
    label.grid(row=2, column=0, sticky=tk.SE, padx=PAD)

    entry = ttk.Entry(frame)
    entry.grid(row=2, column=1, sticky=tk.EW, padx=PAD)

    padding = ttk.Label(frame, text='')
    padding.grid(row=3, column=0)

    label = ttk.Label(frame, text='label 3')
    label.grid(row=4, column=0, sticky=tk.SE, padx=PAD)

    entry = ttk.Entry(frame)
    entry.grid(row=4, column=1, sticky=tk.EW, padx=PAD)


def _button_frame(container) -> None:
    """Create button row."""
    frame = ttk.Frame(container)
    frame.grid(row=3, column=0, sticky=tk.EW, padx=PAD, pady=PAD)

    frame.columnconfigure(0, weight=1)
    frame.columnconfigure(1, weight=10)
    frame.columnconfigure(2, weight=1)

    process_button = ttk.Button(
        frame,
        text='Save',
    )
    process_button.grid(row=0, column=0, sticky=tk.W)

    padding = ttk.Label(frame, text='')
    padding.grid(row=0, column=1)

    quit_button = ttk.Button(frame, text='Quit', command=dismiss)
    quit_button.grid(row=0, column=2, sticky=tk.E)


def dismiss():
    root.grab_release()
    root.destroy()


root = tk.Tk()

# style = ttk.Style()
# style.configure('TFrame', background='yellow')
# style.configure('blue.TFrame', background='blue')
# style.configure('green.TFrame', background='green')
# style.configure('red.TFrame', background='red')

root.rowconfigure(0, weight=1)
root.rowconfigure(1, weight=10)
root.rowconfigure(2, weight=1)

root.columnconfigure(0, weight=1)

_header_frame(root)
_main_frame(root)
_button_frame(root)

root.mainloop()
tkinter
  • 1 个回答
  • 28 Views
Martin Hope
Elm
Asked: 2023-09-14 23:26:15 +0800 CST

使用 tkinter 和scrolledText,我想创建一个带有红色边框的弹出窗口

  • 5

我想要弹出窗口上有红色边框。边框宽度有效,但颜色无效。边框颜色仍然是黑色,而不是红色。我尝试了两种不同的方法。两者均呈现黑色边框。

方法#1(首选)

import tkinter as tk
from tkinter.scrolledtext import ScrolledText


                def display_dataframe():

                    # Create a tkinter window
                    window = tk.Tk()
                    window.title('Stock Alert')

                    # Create a scrolled text widget to display the DataFrame

                    text_widget = ScrolledText(window, width=100, height=15, borderwidth=5, relief="solid", highlightbackground="red")
                    text_widget.insert(tk.END, alert_list_display.to_string(index=False))  # Insert DataFrame content
                    text_widget.pack()

                    # Start the tkinter main loop
                    window.mainloop()

                # Call the function to display the DataFrame in a pop-up window
                display_dataframe()

方法#2

import tkinter as tk
from tkinter import scrolledtext

def change_border_color(frame, color):
    frame.configure(highlightbackground=color)

# Create a tkinter window
window = tk.Tk()
window.title('ScrolledText Border Color')

# Create a custom frame with a ScrolledText widget
frame = tk.Frame(window, borderwidth=10, relief="solid", highlightbackground="red")
frame.pack()

text_widget = scrolledtext.ScrolledText(frame, width=100, height=15)
text_widget.pack(fill="both", expand=True)

# Change the border color of the custom frame
change_border_color(frame, "blue")

# Start the tkinter main loop
window.mainloop()
tkinter
  • 1 个回答
  • 21 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve