【发布时间】:2022-10-23 00:34:58
【问题描述】:
我正在开发一个使用 tkinter 和 customtkinter 的 GUI 程序。在尝试创建此 popUpBox 时,我似乎遇到了一个烦人的错误。基本我在脚本运行期间使用它来打开一个带有单选按钮的弹出框以进行选择。如果我 mainloop 它工作正常,但如果我尝试在主 GUI 中使用 mainloop 运行它,它会崩溃,如果我尝试将它作为 topLevel 运行,我会在底部得到错误。
import tkinter
import customtkinter
class equipPopUp(customtkinter.CTkToplevel):
def __init__(self,titleName,staff,labelFound=''):
super().__init__()
self.rfrBTNList=[]
self.printBTNList=[]
self.labelFound = labelFound
self.staff = staff
if self.staff == 0:
self.status = 'Student'
elif self.staff == 1:
self.status = 'Staff'
self.titleName = titleName
#### Main Window ###
self.title(f"{titleName}")
window_width = 750
window_height = 600
screen_width = self.winfo_screenwidth()
screen_height = self.winfo_screenheight()
# find the center point
center_x = int(screen_width/2 - window_width / 2)
center_y = int(screen_height/2 - window_height / 2)
self.geometry(f'{window_width}x{window_height}+{center_x}+{center_y}')
self.btn1 = tkinter.StringVar()
self.btn2 = tkinter.StringVar()
self.btn3 = tkinter.StringVar()
self.label_radio_group = customtkinter.CTkLabel(master=self,
text="Please Select Request Equipment:")
self.label_radio_group.grid(row=0,column=0,sticky='nw')
if self.labelFound == 'N':
z = 0
Equipment_Requested = ["Print Return Label at SCA", "Email Electronic Return Label", "Email Electronic Return Label"]
for i in Equipment_Requested:
z+=1
self.radio_button = customtkinter.CTkRadioButton(master=self,
text= i,
variable=self.btn3,
value=z)
self.radio_button.grid(row=z,column=0,sticky='nw')
x = 0
Equipment_Requested = [f"Replacement {self.status} Kit", f"Replacement {self.status} Printer", "Charger"]
for i in Equipment_Requested:
x+=1
self.radio_button = customtkinter.CTkRadioButton(master=self,
text= i,
variable=self.btn1,
value=x,
command=self.submitButton)
self.radio_button.grid(row=x,column=1,sticky='nw')
else:
x = 0
Equipment_Requested = [f"Replacement {self.status} Kit", f"Replacement {self.status} Printer", "Charger"]
for i in Equipment_Requested:
x+=1
self.radio_button = customtkinter.CTkRadioButton(master=self,
text= i,
variable=self.btn1,
value=x,
command=self.submitButton)
self.radio_button.grid(row=x,column=0,sticky='nw')
def createLabelBtns(self):
y=0
ra=self.label_radio_group2 = customtkinter.CTkLabel(master=self,
text="Please Select Reason for Return:")
self.label_radio_group2.grid(row=0,column=2,sticky='nw')
self.rfrBTNList.append(ra)
rlm = ["Print Return Label at SCA", "Email Electronic Return Label", "Email Electronic Return Label"]
for i in rlm:
y+=1
rb=self.radio_button = customtkinter.CTkRadioButton(master=self,
text= i,
variable=self.btn3,
value=y)
self.radio_button.grid(row=y,column=2,sticky='nw')
self.rfrBTNList.append(rb)
def createRFRBtns(self):
y=0
ra=self.label_radio_group2 = customtkinter.CTkLabel(master=self,
text="Please Select Reason for Return:")
self.label_radio_group2.grid(row=0,column=2,sticky='nw')
self.rfrBTNList.append(ra)
equipment_reason_for_return = ["Display", "OS/MB", "Keyboard", "Camera", "Audio/Mic", "Battery", "Physical Damage"]
for i in equipment_reason_for_return:
y+=1
rb=self.radio_button = customtkinter.CTkRadioButton(master=self,
text= i,
variable=self.btn2,
value=y)
self.radio_button.grid(row=y,column=2,sticky='nw')
self.rfrBTNList.append(rb)
self.my_button = customtkinter.CTkButton(master=self, text="Submit", command = self.destroy)
self.my_button.grid(row=8,column=2,sticky='nw')
def createPrinterChoices(self):
y=0
ra=self.label_radio_group3 = customtkinter.CTkLabel(master=self,
text="Please Select Reason for Return of Printer:")
self.label_radio_group3.grid(row=0,column=2,sticky='nw')
self.printBTNList.append(ra)
equipment_reason_for_return = ["Hardware", "Software"]
for i in equipment_reason_for_return:
y+=1
rb=self.radio_button = customtkinter.CTkRadioButton(master=self,
text= i,
variable=self.btn2,
value=y)
self.radio_button.grid(row=y,column=2,sticky='nw')
self.printBTNList.append(rb)
self.my_button = customtkinter.CTkButton(master=self, text="Submit", command = self.destroy)
self.my_button.grid(row=8,column=2,sticky='nw')
def submitButton(self):
if self.btn1.get()=='1':
for widget in self.printBTNList:
widget.grid_remove()
self.createRFRBtns()
if self.btn1.get()=='2':
for widget in self.rfrBTNList:
widget.grid_remove()
self.createPrinterChoices()
if self.btn1.get()=='3':
for widget in self.rfrBTNList:
widget.grid_remove()
for widget in self.printBTNList:
widget.grid_remove()
self.my_button = customtkinter.CTkButton(master=self, text="Submit", command = self.returnStuff)
self.my_button.grid(row=8,column=2,sticky='nw')
def submitButton2(self):
self.destroy
def printSubmitBTN(self):
# print("Printer"+self.btn2.get())
pass
def returnStuff(self):
return self.btn1.get(),self.btn2.get(),self.btn3.get()
def start(self):
self.mainloop()
print(type(self.btn1.get()))
print(type(self.btn2.get()))
print(type(self.btn3.get()))
return self.btn1.get(),self.btn2.get(),self.btn3.get()
我收到的错误是
rlm,ERI,RFRI = equipPopUp('Equipment Requested',staff,'N')
File "C:\Program Files\Python39\lib\tkinter\__init__.py", line 1652, in cget
return self.tk.call(self._w, 'cget', '-' + key)
TypeError: can only concatenate str (not "int") to str
我在用
staff=1
rlm,ERI,RFRI = equipPopUp('Equipment Requested',staff,'N')
我无法弄清楚是什么原因造成的。我已经调查了那个特定的错误,并且从我收集的内容来看,我应该在某个地方尝试混合 str 和 int 但我根本无法弄清楚它认为我在做什么。 我正在使用 python 版本 3.9.13
【问题讨论】:
-
您应该开始删除问题消失的代码单元行。那里有很多似乎与问题无关的代码。
标签: python tkinter customtkinter