员工信息收集方式不够全面
Method of collecting employee information is not comprehesive enough
我正在构建一个 GUI 来模仿我为学习 PyQt4 而编写的 Employee 程序。目前,我设置了 GUI 来询问编程语言。在这里,用户可以从语言列表中进行选择。我喜欢以下功能的方法:
def new_developer(self):
name, ok = QtGui.QInputDialog.getText(self, "Add Developer", "Enter developers name:")
salary, ok = QtGui.QInputDialog.getInt(self, "Add Developer", "Enter developers salary:")
items = ("C", "C++", "Java", "Python")
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
ID = new_ID()
emp1 = Developer(ID, salary, name, programing_language)
我之前使用的另一种方法是让用户输入代表员工编程语言的字符串。
我的问题是当前方法不允许用户select多种编程语言。我希望有人可以帮助我改变我的代码,以便用户可以 select 多种编程语言。如果需要,这里是整个程序供参考:
import sys
import random
from PyQt4 import QtGui
employee_dict = {}
all_randomly_generated_intigers = {}
x = 0
class Employee:
def __init__(self, id, salary, name):
self.id = id
self.salary = salary
self.name = name
employee_dictonary(self)
def info(self):
if isinstance(self, Developer):
return "Employee ID:{} \nSalary:{} \nDevelopers name:{}"\
" \nKnown programing languages:{}".format(self.id,
self.salary,
self.name,
self.programming_language)
else:
return "Employee ID:{} \nEmployees salary:{} "\
"\nEmployees name:".format(self.id, self.salary, self.name)
class Developer(Employee):
def __init__(self, id, salary, name, programming_language):
super().__init__(id, salary, name)
self.programming_language = programming_language
def employee_dictonary(self):
employee_dict[self.id] = self
def new_ID():
y = random.randint(0, 5)
global x
while x in all_randomly_generated_intigers:
x += 1
all_randomly_generated_intigers[x] = y
return x
class Window(QtGui.QMainWindow, Employee):
def __init__(self):
super(Window, self).__init__() #Returns the parent object or the QMainWindow object
self.setGeometry(50, 50, 500, 300)
self.setWindowTitle("Employee builder")
create_Employee = QtGui.QAction("&Add Employee", self)
create_Employee.triggered.connect(self.new_employee)
create_Developer = QtGui.QAction("&Add Developer", self)
create_Developer.triggered.connect(self.new_developer)
find_employee_information = QtGui.QAction("&Find Employee Information", self)
find_employee_information.triggered.connect(self.display_employee)
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu('&File')
fileInformationMenu = mainMenu.addMenu('&Employee Information')
fileMenu.addAction(create_Employee)
fileMenu.addAction(create_Developer)
fileInformationMenu.addAction(find_employee_information)
self.home()
def home(self):
self.show()
def new_developer(self):
name, ok = QtGui.QInputDialog.getText(self, "Add Developer", "Enter developers name:")
salary, ok = QtGui.QInputDialog.getInt(self, "Add Developer", "Enter developers salary:")
items = ("C", "C++", "Java", "Python")
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
ID = new_ID()
emp1 = Developer(ID, salary, name, programing_language)
def new_employee(self):
name, ok = QtGui.QInputDialog.getText(self, "Add Employee", "Enter employees name:")
salary, ok = QtGui.QInputDialog.getInt(self, "Add Employee", "Enter employees salary:")
ID = new_ID()
emp1 = Employee(ID, salary, name)
def display_employee(self):
ID, ok = QtGui.QInputDialog.getInt(self, "Employee Information", "Enter employees ID number:")
employee = employee_dict[ID]
QtGui.QMessageBox.information(self, "New Employee", employee.info())
def run():
app = QtGui.QApplication(sys.argv)
GUI = Window()
sys.exit(app.exec_())
run()
如果您想一直调用同一个对话框直到用户取消,并保留所有选项的列表,您只需使用循环即可。所以,而不是这个:
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
... 这样做:
progamming_languages = []
while True:
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
if not ok:
break
programming_languages.append(progamming_language)
虽然我们正在处理它,但您确实应该检查 ok
而不是在所有其他情况下忽略它。毕竟,如果用户单击 Cancel
而不是在您询问姓名时输入姓名,您真的要继续提问并最终创建一个空名的新员工吗?
此外,如果您的悬挂缩进不是已经远离屏幕边缘,您的代码将更具可读性。例如,而不是这个:
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
... 这样做:
programing_language, ok = QtGui.QInputDialog.getItem(
self, "Add Developer", "list of languages", items, 0, False)
……或者甚至是这样:
programing_language, ok = QtGui.QInputDialog.getItem(
self, "Add Developer", "list of languages", items, 0, False
)
或者,更好的是,获取像 black
or yapf
这样的自动格式化程序,并将其设置为在您保存代码时自动格式化您的代码,这样您就不必考虑这样的事情。
我正在构建一个 GUI 来模仿我为学习 PyQt4 而编写的 Employee 程序。目前,我设置了 GUI 来询问编程语言。在这里,用户可以从语言列表中进行选择。我喜欢以下功能的方法:
def new_developer(self):
name, ok = QtGui.QInputDialog.getText(self, "Add Developer", "Enter developers name:")
salary, ok = QtGui.QInputDialog.getInt(self, "Add Developer", "Enter developers salary:")
items = ("C", "C++", "Java", "Python")
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
ID = new_ID()
emp1 = Developer(ID, salary, name, programing_language)
我之前使用的另一种方法是让用户输入代表员工编程语言的字符串。
我的问题是当前方法不允许用户select多种编程语言。我希望有人可以帮助我改变我的代码,以便用户可以 select 多种编程语言。如果需要,这里是整个程序供参考:
import sys
import random
from PyQt4 import QtGui
employee_dict = {}
all_randomly_generated_intigers = {}
x = 0
class Employee:
def __init__(self, id, salary, name):
self.id = id
self.salary = salary
self.name = name
employee_dictonary(self)
def info(self):
if isinstance(self, Developer):
return "Employee ID:{} \nSalary:{} \nDevelopers name:{}"\
" \nKnown programing languages:{}".format(self.id,
self.salary,
self.name,
self.programming_language)
else:
return "Employee ID:{} \nEmployees salary:{} "\
"\nEmployees name:".format(self.id, self.salary, self.name)
class Developer(Employee):
def __init__(self, id, salary, name, programming_language):
super().__init__(id, salary, name)
self.programming_language = programming_language
def employee_dictonary(self):
employee_dict[self.id] = self
def new_ID():
y = random.randint(0, 5)
global x
while x in all_randomly_generated_intigers:
x += 1
all_randomly_generated_intigers[x] = y
return x
class Window(QtGui.QMainWindow, Employee):
def __init__(self):
super(Window, self).__init__() #Returns the parent object or the QMainWindow object
self.setGeometry(50, 50, 500, 300)
self.setWindowTitle("Employee builder")
create_Employee = QtGui.QAction("&Add Employee", self)
create_Employee.triggered.connect(self.new_employee)
create_Developer = QtGui.QAction("&Add Developer", self)
create_Developer.triggered.connect(self.new_developer)
find_employee_information = QtGui.QAction("&Find Employee Information", self)
find_employee_information.triggered.connect(self.display_employee)
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu('&File')
fileInformationMenu = mainMenu.addMenu('&Employee Information')
fileMenu.addAction(create_Employee)
fileMenu.addAction(create_Developer)
fileInformationMenu.addAction(find_employee_information)
self.home()
def home(self):
self.show()
def new_developer(self):
name, ok = QtGui.QInputDialog.getText(self, "Add Developer", "Enter developers name:")
salary, ok = QtGui.QInputDialog.getInt(self, "Add Developer", "Enter developers salary:")
items = ("C", "C++", "Java", "Python")
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
ID = new_ID()
emp1 = Developer(ID, salary, name, programing_language)
def new_employee(self):
name, ok = QtGui.QInputDialog.getText(self, "Add Employee", "Enter employees name:")
salary, ok = QtGui.QInputDialog.getInt(self, "Add Employee", "Enter employees salary:")
ID = new_ID()
emp1 = Employee(ID, salary, name)
def display_employee(self):
ID, ok = QtGui.QInputDialog.getInt(self, "Employee Information", "Enter employees ID number:")
employee = employee_dict[ID]
QtGui.QMessageBox.information(self, "New Employee", employee.info())
def run():
app = QtGui.QApplication(sys.argv)
GUI = Window()
sys.exit(app.exec_())
run()
如果您想一直调用同一个对话框直到用户取消,并保留所有选项的列表,您只需使用循环即可。所以,而不是这个:
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
... 这样做:
progamming_languages = []
while True:
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
if not ok:
break
programming_languages.append(progamming_language)
虽然我们正在处理它,但您确实应该检查 ok
而不是在所有其他情况下忽略它。毕竟,如果用户单击 Cancel
而不是在您询问姓名时输入姓名,您真的要继续提问并最终创建一个空名的新员工吗?
此外,如果您的悬挂缩进不是已经远离屏幕边缘,您的代码将更具可读性。例如,而不是这个:
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
... 这样做:
programing_language, ok = QtGui.QInputDialog.getItem(
self, "Add Developer", "list of languages", items, 0, False)
……或者甚至是这样:
programing_language, ok = QtGui.QInputDialog.getItem(
self, "Add Developer", "list of languages", items, 0, False
)
或者,更好的是,获取像 black
or yapf
这样的自动格式化程序,并将其设置为在您保存代码时自动格式化您的代码,这样您就不必考虑这样的事情。