checkbutton1 = Checkbutton(self.button_frame, variable=var, text="{}".format(data_demo.Serial_Number), compound='right', font=("Arial", int(self.button_frame.winfo_width()/2))) print(self.button_frame.winfo_width(), "1")为什么打印的是1
时间: 2024-03-20 14:41:29 浏览: 33
根据你提供的代码,我猜测问题可能出在获取 `self.button_frame` 宽度时机上。在创建 `Checkbutton` 对象时,它所在的 `self.button_frame` 可能还没有被摆放到具体的位置,此时获取其宽度可能是0。因此,你可以尝试将获取 `self.button_frame` 宽度的代码放到创建 `Checkbutton` 对象之前,或者使用 `self.button_frame.update()` 方法强制刷新窗口,再获取宽度。具体代码如下所示:
```
self.button_frame.update() # 强制刷新窗口
print(self.button_frame.winfo_width()) # 获取宽度
checkbutton1 = Checkbutton(self.button_frame, variable=var, text="{}".format(data_demo.Serial_Number), compound='right', font=("Arial", int(self.button_frame.winfo_width()/2)))
```
这样应该就可以正确获取到 `self.button_frame` 的宽度了。
相关问题
class Lnput_lnitialization(): def __init__(self, top, Number_of_rows): self.top = top int(data_demo.window_width // 3.9875) int(data_demo.window_height // 1.138) self.frame = tk.Frame(self.top, bg='Black', highlightthickness=2, highlightbackground='Black') self.frame.place(relx=0.739, rely=0.083, width=int(data_demo.window_width // 3.87), height=int(data_demo.window_height // 1.15)) self.canvas = tk.Canvas(self.frame) self.canvas.place(relx=0, rely=0, width=int(data_demo.window_width // 3.9875), height=int(data_demo.window_height // 1.15)) scrollbar = tk.Scrollbar(self.frame, command=self.canvas.yview) scrollbar.pack(side="right", fill="y") self.canvas.configure(yscrollcommand=scrollbar.set) self.button_frame = tk.Frame(self.canvas, bg='Yellow') self.canvas.create_window((0, 0), window=self.button_frame, anchor="nw") self.Content(Number_of_rows) # 在步骤栏创建填写框 def Content(self, Number_of_rows): x = 0.01 y = 0.01 for a in range(Number_of_rows): var = tk.IntVar() checkbutton1 = Checkbutton(self.button_frame, variable=var, text="{}".format(data_demo.Serial_Number), compound='right') checkbutton1.grid(row=data_demo.Serial_Number, column=1, padx=3, pady=5) data_demo.checkbutton1_boxs.append(checkbutton1) data_demo.checkbutton_bool.append(var) combobox1 = ttk.Combobox(self.button_frame, values=["遥控", "语音", "随机"], width=4) combobox1.grid(row=data_demo.Serial_Number, column=2, padx=6, pady=5) data_demo.comboxox_boxs.append(combobox1)怎么让他自适应大小
可以考虑使用`pack_propagate(False)`方法来禁止自动调整大小,然后使用`pack(fill=BOTH, expand=True)`来使其自适应大小。具体修改方法如下:
1. 将`self.button_frame`的`pack()`方法更改为`pack_propagate(False)`,以禁止自动调整大小。
2. 在`self.canvas.create_window()`方法中添加`pack(fill=BOTH, expand=True)`,以使其自适应大小。
修改后的代码如下:
```
self.button_frame = tk.Frame(self.canvas, bg='Yellow')
self.button_frame.pack_propagate(False) # 禁止自动调整大小
self.canvas.create_window((0, 0), window=self.button_frame, anchor="nw")
self.button_frame.pack(fill=BOTH, expand=True) # 使其自适应大小
```
class Lnput_lnitialization(): def __init__(self, top, Number_of_rows): self.top = top int(data_demo.window_width // 3.9875) int(data_demo.window_height // 1.138) self.frame = tk.Frame(self.top, bg='Black', highlightthickness=2, highlightbackground='Black') self.frame.place(relx=0.739, rely=0.083, width=int(data_demo.window_width // 3.87), height=int(data_demo.window_height // 1.15)) self.canvas = tk.Canvas(self.frame) self.canvas.place(relx=0, rely=0, width=int(data_demo.window_width // 3.9875), height=int(data_demo.window_height // 1.15)) scrollbar = tk.Scrollbar(self.frame, command=self.canvas.yview) scrollbar.pack(side="right", fill="y") self.canvas.configure(yscrollcommand=scrollbar.set) self.button_frame = tk.Frame(self.canvas, bg='Yellow') # self.button_frame.place(relwidth=0.98, relheight=1) self.canvas.create_window((0, 0), window=self.button_frame, anchor="nw") self.Content(Number_of_rows) # 在步骤栏创建填写框 def Content(self, Number_of_rows): x = 0.01 y = 0.01 for a in range(Number_of_rows): var = tk.IntVar() checkbutton1 = Checkbutton(self.button_frame, variable=var, text="{}".format(data_demo.Serial_Number), compound='right') checkbutton1.grid(row=data_demo.Serial_Number, column=1, padx=3, pady=5) # checkbutton1.place(relx=x, rely=y) data_demo.checkbutton1_boxs.append(checkbutton1) data_demo.checkbutton_bool.append(var)为什么只能用grid不能用plice
在这段代码中,使用grid()方法和place()方法都是可以的,它们都是用来在Tkinter窗口中摆放控件的方法。grid()方法是用来将控件放置在网格中的,而place()方法则是用来将控件放置在指定的位置上的。不过,在这段代码中,使用了Canvas控件来作为容器,并使用create_window()方法将Frame控件添加到Canvas中,这时候使用grid()方法和place()方法都会出现问题。
因为Canvas控件是不支持grid()和place()方法的,所以在使用Canvas控件时,应该使用create_window()方法将其他控件添加到Canvas中。所以,在这段代码中,使用了create_window()方法来将Frame控件添加到Canvas中,并使用了grid()方法来将Checkbutton控件添加到Frame中,这样就可以实现对Checkbutton控件的摆放了。
相关推荐
![mp4](https://img-home.csdnimg.cn/images/20210720083504.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)
![](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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)