You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from UI import *
# import tkinter as tk
# from Instruction4 import SimMem
from tkinter import messagebox
class ClockStep:
def __init__(self):# 绘制控制器背景板
round_rectangle(74, 434, 533, 642, r=25, fill=BACK, width=0)
round_rectangle(97, 525, 276, 627, r=25, fill=BLACK, width=0)
self.dx2, self.dy2, self.dw2, self.dh2 = 95, 455, 200, 40# 时钟数字间隔
self.R, self.x0, self.y0, self.dx = 15, 113, 473, 35#时钟大小
def clo_mark(self, cv:Canvas):# 依据ClockStep[]的值显示时钟元素
for i in range(6):#遍历六个时钟刻,绘制各个时钟
cv.create_oval(i * self.dx + self.x0 - self.R, self.y0 - self.R, i * self.dx + self.x0 + self.R,
self.y0 + self.R, width=1)#绘制时钟圆圈
if cpu.clo[i] == True:# 如果存储结构中clo[i]为1则该时钟高亮显示
cv.create_oval(self.x0 - self.R + self.dx * i, self.y0 - self.R,
self.x0 + self.R + self.dx * i, self.y0 + self.R, width=1, fill=RED)
else:# 如果存储结构中clo[i]为1则该时钟正常显示
cv.create_oval(self.x0 - self.R + self.dx * i, self.y0 - self.R,
self.x0 + self.R + self.dx * i, self.y0 + self.R,
width=1, fill=WHITE)
cv.create_text(self.dx2 + 12, self.dy2 + 3, text='1 2 3 4 5 6', font=('微软雅黑', 18), anchor=NW)# 重新绘制各时钟编号
cv.update()#更新画布
# 实现仿真控制器的各个屏幕元素同时依据ClockStep[]的值显示节拍元素
def show(self, cv: Canvas, root):
# 标记控制器各个部件名称
cv.create_text(95, 434, text='Clock', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
cv.create_text(342, 434, text='PC', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
cv.create_text(104, 500, text='SigCtrl', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
cv.create_text(342, 540, text='IR', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
# 根据当前控制器存储的值显示PC值
PC = tk.Label(root, text=cpu.PC(), fg=BLACK, font=('微软雅黑', 12), bg=WHITE)
PC.place(x=335, y=455, height=30, width=150)
# 根据当前控制器存储的值显示IR值
IR = tk.Label(root, text=cpu.IR(), fg=BLACK, font=('微软雅黑', 12), bg=WHITE)
IR.place(x=335, y=565, height=30, width=150)
# 绘制Clock背景板
bx2, by2, bw2, bh2 = 95, 455, 200, 40
round_rectangle(bx2, by2, bx2 + 215, by2 + 35, r=20, fill=WHITE, width=0)
# 绘制时钟名称
cv.create_text(bx2 + 12, by2 + 3, text='1 2 3 4 5 6', font=('微软雅黑', 18), anchor=NW, )
R = 15
x0 = 113
y0 = 473
dx = 35
# 绘制各个时钟
for i in range(6):
cv.create_oval(i * dx + x0 - R, y0 - R, i * dx + x0 + R, y0 + R, width=1)
self.clo_mark(cv)
# 更新画布
cv.update()
# 实现仿真控制器的各个屏幕元素同时依据ClockStep[]的值显示节拍元素
def init(self, cv:Canvas, root):
cv.create_text(95, 434, text='Clock', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)# 标记PC名称
cv.create_text(342, 434, text='PC', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)# 标记PC名称
cv.create_text(104, 500, text='SigCtrl', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)# 标记sig_ctrl名称
cv.create_text(342, 540, text='IR', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)# 标记IR名称
PC = tk.Label(root, text=cpu.PC(), fg=BLACK, font=('微软雅黑', 12), bg=WHITE)# 根据cpu存储的值显示PC值
PC.place(x=335, y=455, height=30, width=150)#放置PC值
IR = tk.Label(root, text=cpu.IR(), fg=BLACK, font=('微软雅黑', 12), bg=WHITE)# 根据cpu存储的值显示IR值
IR.place(x=335, y=565, height=30, width=150)#放置IR值
bx2, by2, bw2, bh2 = 95, 455, 200, 40# Clock背景板大小
round_rectangle(bx2, by2, bx2+215, by2+35, r=20, fill=WHITE, width=0)# 绘制Clock背景板
self.clo_mark(cv)#绘制六个时钟
cv.update()#更新面板
def jp(self, cv:Canvas, flag, num):
if flag:
cv.create_oval(self.x0 - self.R + self.dx * (num - 1), self.y0 - self.R, self.x0 + self.R + self.dx * (num - 1), self.y0 + self.R, width=1, fill=RED)
else:
cv.create_oval(self.x0 - self.R + self.dx * (num - 1), self.y0 - self.R, self.x0 + self.R + self.dx * (num - 1), self.y0 + self.R,
width=1, fill=WHITE)
cv.create_oval(self.x0 - self.R + self.dx * (num - 1), self.y0 - self.R, self.x0 + self.R + self.dx * (num - 1), self.y0 + self.R,
width=1)
cv.create_text(self.dx2 + 12, self.dy2 + 3, text='1 2 3 4 5 6', font=('微软雅黑', 18), anchor=NW)
cv.update()
if __name__ == "__main__":
cl=ClockStep()
# cl.clo_mark(cv)
cl.init(cv,root)
'''
def add_program():
cl.init(cv, root)
# cl.show(cv, 1)
# cl.show(cv, 2)
# cl.show(cv, 3)
# cl.show(cv, 4)
# cl.show(cv, 5)
# cl.show(cv, 6)
# si.np()
# cv.create_line(485,469+4.5,485+120+12,469+4.5,width=9,fill=RED,arrow=LAST)
# cv.create_rectangle(485, 469, 485 + 120, 469 + 9, fill=RED)
def left1(event):
print(event.x,event.y)
cv.bind('<Button-1>', left1)
'''
mainloop()