鱼C论坛

 找回密码
 立即注册
楼主: kerln888

[已解决]html5 左边菜单栏保持展开或者关闭的状态

  [复制链接]
 楼主| 发表于 2024-4-21 19:46:28 | 显示全部楼层
python使用executemany批量插入,报错must be real number, not str
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-21 19:46:44 | 显示全部楼层
kerln888 发表于 2024-04-21 19:46
python使用executemany批量插入,报错must be real nu ...


这个错误通常是由于传入的参数类型不匹配造成的。在使用`executemany`方法批量插入时,需要确保参数的类型与数据库表的列类型一致。

首先,请确保你正常连接了数据库,在执行`executemany`之前,可以使用`print`语句打印一下你要插入的数据,确保数据格式正确。

另外,如果你插入的是字符串类型的数据,请确保传入的数据是使用元组或列表进行包裹的,例如:`("string", )`或`["string"]`。

最后,如果你仍然遇到类型错误的问题,可以尝试将参数转换为符合数据库列类型的格式。例如,如果你要插入的是数字类型的数据,可以使用`float()`或`int()`进行转换。

举个例子,假设你要插入的数据是字符串类型,你可以尝试以下代码:
data = [("string1", ), ("string2", ), ("string3", )]
cursor.executemany("INSERT INTO table_name (column_name) VALUES (%s)", data)

如果你要插入的是其他类型的数据,请根据实际情况自行调整代码。

希望以上解决方案能帮到你!如有更多问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-27 21:04:44 | 显示全部楼层
python 读取windows系统 登录日志
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-27 21:04:59 | 显示全部楼层
kerln888 发表于 2024-04-27 21:04
python 读取windows系统 登录日志


要读取Windows系统的登录日志,您可以使用Python的`subprocess`模块来调用系统命令,并将命令输出保存到变量中进行处理。

下面是一个读取Windows系统的登录日志的示例代码:
import subprocess

# 使用系统命令获取登录日志
command = 'wevtutil qe Security /q:"*[System [(EventID=4624)]]" /f:text'
output = subprocess.check_output(command, shell=True, universal_newlines=True)

# 输出登录日志
print(output)

上述示例中,使用`wevtutil`命令来查询Windows的安全事件日志(Security),筛选出事件ID为4624的登录事件。通过`subprocess.check_output()`函数执行系统命令并获取输出结果。

请注意,此示例仅适用于Windows系统。如果您在其他操作系统上运行代码,可能需要更改命令或使用其他工具来读取系统登录日志。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-27 21:09:11 | 显示全部楼层
FishC 发表于 2024-4-27 21:04
要读取Windows系统的登录日志,您可以使用Python的`subprocess`模块来调用系统命令,并将命令输出保存 ...

用win32evtlog读取windows系统 登录日志
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-27 21:09:27 | 显示全部楼层
kerln888 发表于 2024-04-27 21:09
用win32evtlog读取windows系统 登录日志


要使用`pywin32`库中的`win32evtlog`模块读取Windows系统的登录日志,可以按照以下步骤进行操作:

首先,确保已经安装了`pywin32`库,如果没有安装可以通过以下命令进行安装:
pip install pywin32

然后,使用下面的代码来读取Windows系统的登录日志:
import win32evtlog

# 定义要读取的事件日志名称和源名称
log_type = 'Security'
log_source = 'Microsoft Windows security auditing.'

# 连接到事件日志
hand = win32evtlog.OpenEventLog(None, log_type)

# 读取事件日志中的事件
flags = win32evtlog.EVENTLOG_BACKWARDS_READ | win32evtlog.EVENTLOG_SEQUENTIAL_READ
total = win32evtlog.GetNumberOfEventLogRecords(hand)

events = []
while True:
    events = win32evtlog.ReadEventLog(hand, flags, 0)
    if not events:
        break

    for event in events:
        if event.EventID == 4624:  # 登录事件的EventID为4624
            print(event.TimeGenerated.Format())
            print(event.StringInserts[1])  # 打印登录用户名

# 关闭事件日志连接
win32evtlog.CloseEventLog(hand)

上述代码会打印出登录事件的时间和用户名。您可以根据自己的需求进行进一步处理或保存。

需要注意的是,运行此代码需要管理员权限,否则可能无法读取事件日志。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-28 19:27:39 | 显示全部楼层
FishC 发表于 2024-4-27 21:09
要使用`pywin32`库中的`win32evtlog`模块读取Windows系统的登录日志,可以按照以下步骤进行操作:

...

上面打出来的是登录时间和主机名,不是用户名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-28 19:27:51 | 显示全部楼层
kerln888 发表于 2024-04-28 19:27
上面打出来的是登录时间和主机名,不是用户名


非常抱歉,我理解错了。要读取Windows系统的登录日志以获取用户名,您可以尝试以下代码:
import win32evtlog

# 定义事件类型和源
event_types = {
    1: 'Error',
    2: 'Warning',
    4: 'Information',
    8: 'Audit Success',
    16: 'Audit Failure'
}

event_sources = ['Security']

# 打开安全日志
log_handle = win32evtlog.OpenEventLog(None, 'Security')

# 读取事件
flags = win32evtlog.EVENTLOG_BACKWARDS_READ | win32evtlog.EVENTLOG_SEQUENTIAL_READ
total = win32evtlog.GetNumberOfEventLogRecords(log_handle)

events = win32evtlog.ReadEventLog(log_handle, flags, 0)
for event in events:
    event_id = event.EventID & 0xFFFF

    # 只处理登录事件
    if event_id == 4624:
        event_data = event.StringInserts
        username = event_data[5]
        print(f"Username: {username}")

# 关闭日志句柄
win32evtlog.CloseEventLog(log_handle)

这个代码会打开Windows安全日志,读取所有事件并筛选出登录事件(事件ID为4624),然后打印出对应的用户名。

请注意,运行此代码需要管理员权限。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 08:37:55 | 显示全部楼层
python tkinter 动态往labelFrame里面添加radioButton,添加数量超过labelframe的高度后,无法显示后面添加的radioButton,应该这样做才能显示?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 08:38:11 | 显示全部楼层
kerln888 发表于 2024-05-01 08:37
python tkinter 动态往labelFrame里面添加radioButton ...


当往`LabelFrame`中添加的`RadioButton`数量超过其高度时,可以使用滚动条来实现显示。

以下是一个示例代码,展示如何使用Tkinter和滚动条在`LabelFrame`中动态添加`RadioButton`:
from tkinter import *

def add_radiobutton():
    radio = Radiobutton(label_frame, text="RadioButton")
    radio.pack(fill=X)
    
root = Tk()
root.geometry("300x200")

scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)

label_frame = LabelFrame(root, text="RadioButtons", width=200, height=100)
label_frame.pack()

canvas = Canvas(label_frame, yscrollcommand=scrollbar.set)
canvas.pack(side=LEFT, expand=True, fill=BOTH)

scrollbar.config(command=canvas.yview)

frame = Frame(canvas)
canvas.create_window((0, 0), window=frame, anchor=NW)

for i in range(30):  # 添加30个RadioButton
    add_radiobutton()

frame.update_idletasks()  # 更新frame的大小以适应内容

canvas.config(scrollregion=canvas.bbox("all"))

root.mainloop()

在这个示例中,我们创建了一个带滚动条的`LabelFrame`,用于容纳动态添加的`RadioButton`。通过使用`Canvas`和`create_window`函数,我们在`LabelFrame`中创建了一个可滚动的视图区域。然后,我们可以通过将`RadioButton`添加到一个内部的`Frame`上,来实现动态添加。最后,我们使用`update_idletasks`方法更新`frame`的大小以适应内容,并使用`config`方法设置`scrollregion`以使滚动条正常工作。

希望这个示例对您有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 09:02:46 | 显示全部楼层
FishC 发表于 2024-5-1 08:38
当往`LabelFrame`中添加的`RadioButton`数量超过其高度时,可以使用滚动条来实现显示。

以下是一个 ...

并不能滚动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 09:02:58 | 显示全部楼层


非常抱歉,我理解错了您的问题。在Tkinter中,`LabelFrame`默认是不支持滚动的。要实现滚动的效果,您需要使用`Canvas`和`Scrollbar`来创建一个可滚动的区域。

下面是一个示例代码,演示如何在Tkinter中创建一个可滚动的`LabelFrame`,并动态地向其中添加`RadioButton`:
import tkinter as tk
from tkinter import ttk


def add_radio_button():
    radio_button = ttk.Radiobutton(content_frame, text=f"Option {count.get()}", value=count.get())
    radio_button.pack(pady=5)
    count.set(count.get() + 1)
    canvas.configure(scrollregion=canvas.bbox("all"))


root = tk.Tk()
root.title("Scrollable LabelFrame Demo")

# 创建一个 Canvas
canvas = tk.Canvas(root)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

# 创建一个 Scrollbar
scrollbar = tk.Scrollbar(root, command=canvas.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# 将 Scrollbar 连接到 Canvas
canvas.configure(yscrollcommand=scrollbar.set)
canvas.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")))

# 创建一个 Frame 作为滚动区域的内容
content_frame = ttk.Frame(canvas)

# 将内容 Frame 添加到 Canvas 中
canvas.create_window((0, 0), window=content_frame, anchor="nw")

# 添加一个 Button 用于动态添加 RadioButton
add_button = ttk.Button(root, text="Add RadioButton", command=add_radio_button)
add_button.pack()

# 创建一个计数器变量,用于给 RadioButton 提供不同的值
count = tk.IntVar(value=1)

# 初始化时向内容 Frame 中添加一些 RadioButton
for i in range(10):
    radio_button = ttk.Radiobutton(content_frame, text=f"Option {i+1}", value=i+1)
    radio_button.pack(pady=5)

root.mainloop()

这个示例中通过使用`Canvas`和`Scrollbar`来创建一个可滚动的区域,并将`LabelFrame`的内容放置在其中。`Canvas`会根据内容的实际大小自动调整滚动区域的大小,从而实现滚动功能。

希望这能帮到您!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-2 15:15:56 | 显示全部楼层
FishC 发表于 2024-5-1 09:02
非常抱歉,我理解错了您的问题。在Tkinter中,`LabelFrame`默认是不支持滚动的。要实现滚动的效果,您 ...

我修改了这个代码,radiobutton采用grid排列,排成两行。现在有个问题,当添加的radiobutton在第一行时,滚动条无法下拉显示新增的radioButton。再新增一个radiobutton,滚动条才能下拉显示新增的两个radiobutton
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-2 15:16:15 | 显示全部楼层
kerln888 发表于 2024-05-02 15:15
我修改了这个代码,radiobutton采用grid排列,排成两 ...


是的,您遇到了一个问题。当`RadioButton`的位置超出了可视区域时,滚动条并不会自动滚动以显示新的`RadioButton`。

要解决这个问题,您可以在添加完所有`RadioButton`之后,使用`scrollbar`的`set()`方法将滚动位置设置为最底部,以确保新添加的`RadioButton`在可视区域内。这里是一个示例代码:
import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.geometry("300x200")

# 创建一个垂直滚动条
scrollbar = ttk.Scrollbar(root)
scrollbar.pack(side="right", fill="y")

# 创建一个LabelFrame,作为容器
labelframe = ttk.LabelFrame(root, text="RadioButton列表")
labelframe.pack()

# 创建一个Frame,作为放置RadioButton的容器
frame = ttk.Frame(labelframe)
frame.pack()

# 将滚动条绑定到frame上
frame.bind("<Configure>", lambda e: frame.configure(scrollregion=frame.bbox("all"), yscrollcommand=scrollbar.set))
scrollbar.config(command=frame.yview)

# 添加RadioButton
for i in range(10):
    radio_button = ttk.Radiobutton(frame, text=f"RadioButton {i+1}")
    radio_button.grid(row=i // 2, column=i % 2, padx=10, pady=5)
    
# 设置滚动条位置
scrollbar.set(0.0, 1.0)

root.mainloop()

这样,无论新添加的`RadioButton`在哪个行,滚动条都会自动滚动到最底部,以便您可以看到新添加的`RadioButton`。希望对您有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-2 15:28:55 | 显示全部楼层
FishC 发表于 2024-5-2 15:16
是的,您遇到了一个问题。当`RadioButton`的位置超出了可视区域时,滚动条并不会自动滚动以显示新的`Ra ...

frame不能捆绑滚动条
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-2 15:29:08 | 显示全部楼层
kerln888 发表于 2024-05-02 15:28
frame不能捆绑滚动条


非常抱歉,前面的回答有误。确实,在Tkinter中,`Frame`并不能直接与滚动条绑定。不过,我们可以通过在`Frame`内部创建一个`Canvas`来实现滚动条的效果。下面是一个例子,展示了如何在Tkinter中添加滚动条来滚动`RadioButton`:
import tkinter as tk
from tkinter import ttk

def add_radio_button():
    button_value.set(button_value.get() + 1)
    radio_button = ttk.Radiobutton(frame, text=f"Radio button {button_value.get()}", value=button_value.get())
    radio_button.grid(sticky="w")

root = tk.Tk()
root.title("Scrollable Frame Example")

# 创建滚动条
scrollbar = ttk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# 创建滚动区域
canvas = tk.Canvas(root, yscrollcommand=scrollbar.set)
canvas.pack(fill=tk.BOTH, expand=True)

# 设置滚动条的绑定
scrollbar.config(command=canvas.yview)

# 创建一个帧用于放置 RadioButton
frame = ttk.Frame(canvas)
canvas.create_window((0, 0), window=frame, anchor="nw")

# 添加初始的 RadioButton
button_value = tk.IntVar()
for i in range(10):
    radio_button = ttk.Radiobutton(frame, text=f"Radio button {i+1}", value=i+1)
    radio_button.grid(sticky="w")

# 添加按钮,用于添加新的 RadioButton
add_button = ttk.Button(root, text="Add Radio Button", command=add_radio_button)
add_button.pack()

root.mainloop()

这个例子创建了一个滚动的`RadioButton`列表。当你点击"Add Radio Button"按钮时,会动态地添加新的`RadioButton`。滚动条将自动适应并可以滚动以显示所有的`RadioButton`。

希望这个例子能够帮到你!如有任何问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-2 15:42:10 | 显示全部楼层
FishC 发表于 2024-5-2 15:29
非常抱歉,前面的回答有误。确实,在Tkinter中,`Frame`并不能直接与滚动条绑定。不过,我们可以通过在 ...

点击"Add Radio Button"并不会滚动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-2 15:42:33 | 显示全部楼层
kerln888 发表于 2024-05-02 15:42
点击"Add Radio Button"并不会滚动


非常抱歉,之前的回答有误。确实,在`Frame`上添加滚动条并不会自动滚动。但是我们可以通过在`Canvas`上添加滚动条来实现这个功能。这是一个修订后的代码示例:
import tkinter as tk
from tkinter import ttk

def add_radio_button():
    button_value = len(radio_buttons) + 1
    radio_buttons.append(tk.Radiobutton(canvas, text=f"Radio {button_value}"))
    canvas.create_window((10, button_value * 30), window=radio_buttons[-1], anchor="w", width=200)
    update_scroll_region()

def update_scroll_region():
    canvas.update_idletasks()
    canvas.config(scrollregion=canvas.bbox("all"))

root = tk.Tk()
root.geometry("400x400")

scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

canvas = tk.Canvas(root, yscrollcommand=scrollbar.set)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

scrollbar.config(command=canvas.yview)

frame = tk.Frame(canvas)
canvas.create_window((0, 0), window=frame, anchor="nw")

radio_buttons = []
for i in range(10):
    radio_buttons.append(tk.Radiobutton(frame, text=f"Radio {i+1}"))
    radio_buttons[i].pack()

add_button = ttk.Button(root, text="Add Radio Button", command=add_radio_button)
add_button.pack()

update_scroll_region()

tk.mainloop()

这个示例中,我们将`Frame`换成了`Canvas`,并在`Canvas`上添加了一个滚动条。当点击"Add Radio Button"按钮时,会在`Canvas`中添加一个新的`Radiobutton`。同时,我们添加了`update_scroll_region`函数来更新滚动区域的大小。

希望这次能对您有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-2 16:01:34 | 显示全部楼层
FishC 发表于 2024-5-2 15:42
非常抱歉,之前的回答有误。确实,在`Frame`上添加滚动条并不会自动滚动。但是我们可以通过在`Canvas` ...

我希望添加完新radiobutton以后,滚动条能自动滚到最底部
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-2 16:01:58 | 显示全部楼层
kerln888 发表于 2024-05-02 16:01
我希望添加完新radiobutton以后,滚动条能自动滚到最 ...


非常抱歉之前的回答有误。确实,在Tkinter中,使用滚动条自动滚动到最底部是一个复杂的问题。下面是一个可行的解决方案,使用`Canvas`和`Scrollbar`来实现。

首先,我们创建一个带有滚动条的`Canvas`和一个保存所有按钮的`Frame`:
import tkinter as tk

def add_radio_button():
    # 添加新的单选按钮
    new_button = tk.Radiobutton(frame, text="New Button")
    new_button.pack()

    # 自动滚动到最底部
    canvas.yview_moveto(1)

root = tk.Tk()

# 创建滚动条
scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# 创建Canvas并绑定滚动条
canvas = tk.Canvas(root, yscrollcommand=scrollbar.set)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

scrollbar.config(command=canvas.yview)

# 创建帧并将其放置在Canvas上
frame = tk.Frame(canvas)
canvas.create_window((0, 0), window=frame, anchor=tk.NW)

# 初始按钮
for i in range(20):
    button = tk.Radiobutton(frame, text=f"Button {i+1}")
    button.pack()

# 添加按钮的按钮
add_button = tk.Button(root, text="Add Radio Button", command=add_radio_button)
add_button.pack()

root.mainloop()

通过点击"Add Radio Button"按钮,会添加一个新的单选按钮,并且滚动条会自动滚动到最底部以显示新添加的按钮。试试这段代码,看看是否符合你的要求。希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 05:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表