entry_box = ttk.Combobox(entry_window, postcommand=lambda: entry_box.configure(values=Update_Port())) entry_box.place(x=26, y=40, width=250) entry_box.current(0) 为什么current会报错
时间: 2024-03-07 21:46:45 浏览: 26
如果在设置下拉列表(Combobox)的值之前调用`current()`方法,会导致`current()`方法无法找到对应的选项,从而引发异常。因此,应该在设置完下拉列表的值后再调用`current()`方法。
在你提供的代码中,你在设置下拉列表的值之前调用了`current()`方法,这可能会导致异常。为了解决这个问题,你可以将`current()`方法的调用放在设置下拉列表的值之后,例如:
```python
entry_box = ttk.Combobox(entry_window, postcommand=lambda: entry_box.configure(values=Update_Port()))
entry_box.place(x=26, y=40, width=250)
entry_box['values'] = ['A', 'B', 'C'] # 设置下拉列表的值
entry_box.current(0) # 设置默认选项
```
在这个示例中,我们将设置下拉列表的值和设置默认选项的代码放在了一起。首先,我们用`entry_box['values']`设置了下拉列表的值为['A', 'B', 'C'],然后调用`current()`方法将默认选项设置为第一项。这样就可以避免因为调用`current()`方法时找不到对应的选项而引发异常的问题了。
相关问题
创建工具栏 toolbar = tk.Frame(master, height=30) # 创建样式 style = ttk.Style() style.configure('my.TButton', font=('Arial', 10)) # 设置鼠标悬停时的颜色 style.map('my.TButton', background=[('active', 'blue')]) # 添加占位的 Label tk.Label(toolbar, text="当前选中:").pack(side=tk.LEFT, padx=2, pady=2) self.selected_label = tk.Label(toolbar, text="", fg="red", font=("Arial", 12)) self.selected_label.pack(side=tk.LEFT, padx=2, pady=2) tk.Label(toolbar).pack(side=tk.LEFT, fill=tk.X, expand=True) # 添加占位的 Label tk.Label(toolbar).pack(side=tk.LEFT, fill=tk.X, expand=True) # 添加“查询”按钮 ttk.Button(toolbar, text="查詢", style='my.TButton', command=lambda: QueryWindow(tk.Toplevel(root))).pack( side=tk.LEFT, padx=2, pady=2) # 添加占位的 Label tk.Label(toolbar).pack(side=tk.LEFT, fill=tk.X, expand=True) # 添加“关闭”按钮 ttk.Button(toolbar, text="關閉", style='my.TButton', command=self.quit_app).pack(side=tk.LEFT, padx=2, pady=2) # 显示工具栏 toolbar.pack(side=tk.TOP, fill=tk.X) # 创建左侧面板 self.panel_left = tk.Frame(master, width=150, bg='lightcyan') self.panel_left.pack(side=tk.LEFT, fill=tk.Y) # 创建右侧面板 self.panel_right = tk.Frame(master, bg='white') self.panel_right.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) # 创建Frame来包含标签和下拉框 input_frame = tk.Frame(self.panel_right) input_frame.pack(side=tk.TOP, fill=tk.X, padx=5, pady=5) # 创建标签和下拉框 ri = datetime.datetime.now().strftime('%Y/%m/%d') ri1 = datetime.datetime.now().strftime('%H:%M:%S') self.label1 = tk.Label(input_frame, text="點檢日期") self.label1.pack(side=tk.LEFT, padx=2, pady=2) self.combobox1 = tk.ttk.Combobox(input_frame, values=ri) self.combobox1.pack(side=tk.LEFT, padx=2, pady=2) self.combobox1.current(0) self.label2 = tk.Label(input_frame, text="點檢時間") self.label2.pack(side=tk.LEFT, padx=2, pady=2) self.combobox2 = ttk.Combobox(input_frame) self.combobox2.pack(side=tk.LEFT, padx=2, pady=2) self.update_time()更改這個代碼標簽和輸入框的佈局
您可以使用`grid`或`pack`等布局管理器来重新排列标签和输入框的布局。
例如,使用`grid`布局管理器,您可以按照行和列的方式来设置标签和输入框的位置。具体实现方式如下:
```python
# 创建Frame来包含标签和下拉框
input_frame = tk.Frame(self.panel_right)
input_frame.pack(side=tk.TOP, padx=5, pady=5)
# 创建标签和下拉框
ri = datetime.datetime.now().strftime('%Y/%m/%d')
ri1 = datetime.datetime.now().strftime('%H:%M:%S')
self.label1 = tk.Label(input_frame, text="點檢日期")
self.label1.grid(row=0, column=0, padx=2, pady=2)
self.combobox1 = tk.ttk.Combobox(input_frame, values=ri)
self.combobox1.grid(row=0, column=1, padx=2, pady=2)
self.combobox1.current(0)
self.label2 = tk.Label(input_frame, text="點檢時間")
self.label2.grid(row=1, column=0, padx=2, pady=2)
self.combobox2 = ttk.Combobox(input_frame)
self.combobox2.grid(row=1, column=1, padx=2, pady=2)
self.update_time()
```
在上面的代码中,`grid`方法中的`row`和`column`参数分别用于设置标签和输入框在网格布局中的行和列。`padx`和`pady`参数用于设置控件与其周围的间距。
class ExcelApp: def init(self, master): self.master = master master.title("Excel App") # 创建菜单栏 menubar = tk.Menu(master) master.config(menu=menubar) # 创建文件菜单及其子菜单 filemenu = tk.Menu(menubar, tearoff=0) filemenu.add_command(label="PA綫點檢表", command=lambda: self.load_excel("D:\點檢系統存放資料夾\點檢明細\點檢内容明細.xlsx")) filemenu.add_command(label="Excel 2", command=lambda: self.load_excel("excel2.xlsx")) filemenu.add_command(label="Excel 3", command=lambda: self.load_excel("excel3.xlsx")) menubar.add_cascade(label="文件", menu=filemenu) # 创建帮助菜单及其子菜单 helpmenu = tk.Menu(menubar, tearoff=0) helpmenu.add_command(label="关于", command=self.show_about) menubar.add_cascade(label="帮助", menu=helpmenu) # 创建工具栏 toolbar = tk.Frame(master, height=30) tk.Button(toolbar, text="打开", command=self.open_file).pack(side=tk.LEFT, padx=2, pady=2) tk.Button(toolbar, text="保存", command=self.save_to_excel).pack(side=tk.LEFT, padx=2, pady=2) toolbar.pack(side=tk.TOP, fill=tk.X) # 创建左侧面板 self.panel_left = tk.Frame(master, width=150, bg='lightcyan') self.panel_left.pack(side=tk.LEFT, fill=tk.Y) # 创建右侧面板 self.panel_right = tk.Frame(master) self.panel_right.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) # 创建Frame来包含标签和下拉框 input_frame = tk.Frame(self.panel_right) input_frame.pack(side=tk.TOP, fill=tk.X, padx=5, pady=5) # 创建标签和下拉框 ri = datetime.datetime.now().strftime('%Y/%m/%d') ri1 = datetime.datetime.now().strftime('%H:%M:%S') self.label1 = tk.Label(input_frame, text="點檢日期") self.label1.pack(side=tk.LEFT, padx=2, pady=2) self.combobox1 = tk.ttk.Combobox(input_frame, values=[ri]) self.combobox1.pack(side=tk.LEFT, padx=2, pady=2) self.combobox1.current(0) self.label2 = tk.Label(input_frame, text="點檢時間") self.label2.pack(side=tk.LEFT, padx=2, pady=2) self.combobox2 = tk.ttk.Combobox(input_frame, values=[ri1]) self.combobox2.pack(side=tk.LEFT, padx=2, pady=2) self.combobox2.current(0)在這段代碼中需要在self.combobox2輸入實時跟新的時間
你可以使用 `after()` 方法来实现定时更新时间,例如每秒更新一次。具体实现方法如下:
1. 定义一个方法 `update_time`,用于更新时间和更新 Combobox 中的值。
```python
def update_time(self):
now = datetime.datetime.now()
date_str = now.strftime('%Y/%m/%d')
time_str = now.strftime('%H:%M:%S')
self.combobox1.configure(values=[date_str])
self.combobox1.current(0)
self.combobox2.configure(values=[time_str])
self.combobox2.current(0)
self.master.after(1000, self.update_time) # 每秒更新一次
```
2. 在 `__init__()` 方法中,调用 `update_time` 方法,启动时间更新。
```python
def __init__(self, master):
# ...
self.update_time() # 启动时间更新
```
注意,这里使用了 `self.master.after(1000, self.update_time)` 来实现定时更新。其中,`self.master` 是主窗口对象,`after()` 方法的第一个参数表示等待的时间(毫秒),第二个参数是要执行的方法。因此,上述代码表示每隔 1000 毫秒(即 1 秒),调用一次 `update_time` 方法,实现时间的更新。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)