为python名片夹项目制作用户界面(二):名片查询及修改保存

前面已经完成了欢迎页面中各个按钮与新建、修改页面的关联,也完成了新建名片保存到txt文件中的功能。
本次主要完成的功能有二:

  1. 将card.txt文件中的内容读取到tablewidget中,并增加一个空白行,以便直接修改名片;
  2. 点击保存修改按钮,将修改后的内容保存到card.txt文档,并刷新tablewidget。

保存的槽函数save_all上次已经定义了,只需完善函数内容就行;完成这两个功能还需要增加一个刷新Refrese的槽函数,并且将修改按钮的点击信号同时与save_allRefrese做链接。Refrese其实就是实现将card.txt文件中的内容读取到tablewidget中。
修改后的edit_window代码如下:

from PyQt5.Qt import *
from resource.edit_ui import Ui_Dialog
import os

class Edit(QDialog, Ui_Dialog):
	save_all_signal = pyqtSignal()
	refrese_singnal = pyqtSignal()
	def __init__(self):
		super().__init__()
		self.setupUi(self)
	def Refrese(self):

		file = open("card.txt",encoding="UTF-8")
		file_count = file.readlines()
		card_list = []
		for i in range(0, len(file_count)):
			card_list.append(eval(file_count[i]))
		self.tableWidget.setRowCount(len(file_count)+1)
		for card_dict in card_list:
			name = QTableWidgetItem(card_dict["name"])
			phone = QTableWidgetItem(card_dict["phone"])
			email = QTableWidgetItem(card_dict["email"])
			self.tableWidget.setItem(card_list.index(card_dict),0,name)
			self.tableWidget.setItem(card_list.index(card_dict), 1, phone)
			self.tableWidget.setItem(card_list.index(card_dict), 2, email)
		self.refrese_singnal.emit()
		
	def save_all(self):
		row = self.tableWidget.rowCount()
		file2 = open("card2.txt", "a", encoding="UTF-8")

		for i in range(row):
			try:
				carddict = {"name":self.tableWidget.item(i,0).text(), "phone":self.tableWidget.item(i,1).text(), "email":self.tableWidget.item(i,2).text()}
				file2.write(str(carddict))
				file2.write("\n")
			except:
				print("错误")
				# todo 做一个错误对话框


		file2.close()
		os.remove("card.txt")
		os.rename("card2.txt", "card.txt")
		self.save_all_signal.emit()

	def delete_item(self):
		selected_items = self.tableWidget.selectedItems()
		for items in selected_items:
			self.tableWidget.removeRow(self.tableWidget.indexFromItem(items).row())



if __name__ == '__main__':
	import sys

	QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
	app = QApplication(sys.argv)
	window = Edit()
	# window.save_all_signal.connect(lambda a:print(a))


	window.show()
	sys.exit(app.exec_())

同时,点击欢迎页面的查看按钮,名片应该载入到tabelwidget中,所以,主程序也要修改一下,修改后的主程序如下:

#coding=utf-8
from welcome_pane import Welcome
from create_pane import Create
from edit_pane import Edit
from PyQt5.Qt import *

def write_card(name,phone,email):
	card_dic= {"name":name,"phone":phone,"email":email}
	file_handle = open('card.txt', "a",encoding="utf-8")
	file_handle.write(str(card_dic))
	file_handle.write('\n')
	file_handle.close()
	print('%s 名片已存入' % name)



if __name__ == "__main__":
	import sys
	QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
	app = QApplication(sys.argv)
	welcome = Welcome()
	create = Create()
	edit = Edit()

	welcome.show_create_pane_signel.connect(create.show)
	welcome.show_edit_pane_signal.connect(edit.show)
	welcome.show_edit_pane_signal.connect(edit.Refrese)

	create.create_card_singel.connect(lambda name,phone,email: write_card(name,phone,email))

	welcome.show()
	sys.exit(app.exec_())

本次修改有几个问题:

  1. 写入和读取card.txt的时候必须加上encoding = 'utf-8',不然读写的都是乱码,之前在做没有用户界面的时候没有这个问题啊,是什么原因呢?
  2. 字典键值对的值是空的时候,回发生错误,所以必须用try方法做异常处理,后续可以做一个弹出错误信息框

思考:

  1. 修改其实就是重新写了一个card.txt文件覆盖掉之前的了。怎么能够在原文件上仅修改变更的位置呢?
  2. 欢迎页面应该在点击按钮弹出其他窗口时隐藏

各位大佬有什么好的意见,还请多多指出!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值