首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >收集员工信息的方法不够全面。

收集员工信息的方法不够全面。
EN

Stack Overflow用户
提问于 2018-07-13 18:24:33
回答 1查看 50关注 0票数 0

我正在构建一个图形用户界面来模仿我为了学习PyQt4而编写的一个雇员程序。目前,我已经设置了GUI来请求一种编程语言。在这里,用户可以从语言列表中进行选择。这是我喜欢的方法:

代码语言:javascript
复制
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)

我之前使用的另一种方法是让用户输入一个表示员工编程语言的字符串。

我的问题是,当前的方法不允许用户选择多种编程语言。我希望有人能帮助我改变我的代码,以便用户可以选择多种编程语言。如果需要的话,以下是整个程序供参考:

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-13 19:28:51

如果您想继续调用相同的对话框,直到用户取消,并保留所有选项的列表,只需使用一个循环即可。所以,代替这个:

代码语言:javascript
复制
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
                                                     "list of languages", items, 0, False)

…这样做:

代码语言:javascript
复制
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而不是键入名称,您真的想继续问问题并最终创建一个名为空的新员工吗?

此外,如果没有启动挂起的缩进,代码将更加可读性更强。例如,而不是这样:

代码语言:javascript
复制
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
                                                     "list of languages", items, 0, False)

…这样做:

代码语言:javascript
复制
programing_language, ok = QtGui.QInputDialog.getItem(
    self, "Add Developer", "list of languages", items, 0, False)

…甚至是这个:

代码语言:javascript
复制
programing_language, ok = QtGui.QInputDialog.getItem(
    self, "Add Developer", "list of languages", items, 0, False
)

或者,更好的是,获得一个像blackyapf这样的自动格式化程序,并将其设置为在保存代码时自动格式化代码,这样您就不必考虑这样的事情了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51330933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档