python做一个检索界面_python:图形界面演示八皇后搜索过程

import pygame

import sys

import os

import random

import timefrom pygame.locals import *import tkinterastkfrom tkinter import *import tkinter.messagebox # 要使用messagebox先要导入模块classEight_queen:

queens= 0sts= 0pows=None

def __init__(self,queens):

Eight_queen.queens=queens

Eight_queen.pows= [pow(queens,queens-i) for i in range(0,queens+1)]

Eight_queen.sts= 0@staticmethod

def check(rows):for row in range(1,len(rows)):for i inrange(row):if abs(rows[i] - rows[row]) in (0, row -i):returnrowreturn 0@staticmethod

def queen_next_rows():if Eight_queen.sts >= Eight_queen.pows[0]:returnNone

n=Eight_queen.queens

rows= [0]*nfor x in range(0,n):

rows[x]=(Eight_queen.sts%Eight_queen.pows[x])//Eight_queen.pows[x+1]

err_row =Eight_queen.check(rows)if err_row == 0:

Eight_queen.sts+= 1

return [0,rows]else:

Eight_queen.sts+= Eight_queen.pows[err_row+1]return [1,rows]classCMG: #画面显示管理

screen=None

map=None

gameAnswer=None

WHITE= (255, 255, 255)

GREEN= (0, 255, 0)

RED= (255, 0, 0)

YELLOW= (255, 255, 0)

blocksize= 0step= 0last_answer=None

backgr=None

screen_rect=None

def __init__(self,screen):#if CMG.screen == None:#print("#############OS.PATH=%s"%os.path.dirname(os.path.abspath(__file__)))

CMG.screen=screen

CMG.blocksize= 350//Eight_queen.queens

CMG.screen_rect =None

#如果存在对象成员

self.init_game_info()

def init_game_info(self):

pass

def printAll(self,res):#if CMG.step > len(CMG.gameAnswer):#returnrtn= res[0]

rows= res[1]if rtn == 0:

CMG.last_answer=rows[:]

CMG.screen.fill((0, 0, 0))

queens=Eight_queen.queensif CMG.screen_rect ==None:for x in range(0,queens+1):

end_pos= [(x*CMG.blocksize,0),(x*CMG.blocksize,queens*CMG.blocksize)]

pygame.draw.lines(CMG.screen, CMG.GREEN,0 , end_pos, 2)

end_pos= [(x*CMG.blocksize+400,0),(x*CMG.blocksize+400,queens*CMG.blocksize)]

pygame.draw.lines(CMG.screen, CMG.GREEN,0 , end_pos, 2)for y in range(0,queens+1):

end_pos= [(0,y*CMG.blocksize),(queens*CMG.blocksize,y*CMG.blocksize)]

pygame.draw.lines(CMG.screen, CMG.GREEN,0 , end_pos, 2)

end_pos= [(400,y*CMG.blocksize),(400+queens*CMG.blocksize,y*CMG.blocksize)]

pygame.draw.lines(CMG.screen, CMG.GREEN,0 , end_pos, 2)

select_rect= CMG.screen.subsurface(0,0,800,570)

CMG.screen_rect=select_rect.copy()else:

self.screen.blit(CMG.screen_rect,(0,0))for r in range(0,len(rows)):

y= r*CMG.blocksize + 3x= rows[r] *CMG.blocksize + 3pygame.draw.rect(CMG.screen, CMG.WHITE, ((x,y), (CMG.blocksize-6, CMG.blocksize-6)), 0)if CMG.last_answer !=None:

rows=CMG.last_answerfor r in range(0,len(rows)):

y= r*CMG.blocksize + 3x= rows[r] *CMG.blocksize + 403pygame.draw.rect(CMG.screen, CMG.YELLOW, ((x,y), (CMG.blocksize-6, CMG.blocksize-6)), 0)

#CMG.step+= 1def moveAll(self):

pass

#------------------------------------------------#tkinter,pygame混合区 START

#------------------------------------------------root=tk.Tk()

root.resizable(0,0)

embed= tk.Frame(root, width = 800, height = 570) #creates embed frame forpygame window

embed.grid(columnspan= (800), rowspan = 730) # Adds grid

embed.pack(side=TOP) #packs window to the left

buttonwin= tk.Frame(root, width = 800, height = 150)

buttonwin.pack(side=BOTTOM)

os.environ['SDL_WINDOWID'] =str(embed.winfo_id())

os.environ['SDL_VIDEODRIVER'] = 'windib'screen= pygame.display.set_mode((800,570))

#pygame.init()

pygame.display.init()

pygame.mixer.init()

#------------------------------------------------#tkinter,pygame混合区 END

#------------------------------------------------#参数,因为函数内要使用之外的变量,需要globe,因此全部打包classPARAM:

STATUS= 0TICK_NORMAL= 5TICK_STEP= 30#按钮动作区=====================================def get_input_data(inputcell,min,max):if inputcell.get().isdigit():

num= int(inputcell.get())if min<=num and num<=max:returnnumreturn -1def exit_game():globalparam

param.STATUS= 100def stop_game():globalparam

param.STATUS= 10def sel_game():globalparam

qs= get_input_data(inputqs,4,9)

speed= get_input_data(inputspd,11,99)if qs == -1 or speed == -1:return

else:

eq=Eight_queen(qs)

param.cmg=CMG(screen)

PARAM.TICK_STEP=speed

param.STATUS= 0#控件定义区=====================================button_stop_b= Button(buttonwin,text = '本次演示结束', width=11, command=stop_game)

button_stop_b.place(x=700,y=30)

btnwin_qs_l= tk.Label(buttonwin, text='皇后数(4-9):')

btnwin_qs_l.place(x=530,y=70)

inputqs=StringVar()

btnwin_qs_e= tk.Entry(buttonwin, show=None,width=2,textvariable =inputqs)

btnwin_qs_e.place(x=590,y=70)

btnwin_spd_l= tk.Label(buttonwin, text='演示速度(11-99):')

btnwin_spd_l.place(x=610,y=70)

inputspd=StringVar()

btnwin_spd_e= tk.Entry(buttonwin, show=None,width=3,textvariable =inputspd)

btnwin_spd_e.place(x=710,y=70)

button_sel_b= Button(buttonwin,text = '执行', width=7, command=sel_game)

button_sel_b.place(x=740,y=65)

button_exit_b= Button(buttonwin,text = '退出画面', width=7, command=exit_game)

button_exit_b.place(x=740,y=100)

#状态,参数,循环中使用,比如STATUS=0:初次进入,1:...100:退出

param=PARAM()

eq= Eight_queen(6)

param.cmg=CMG(screen)

#------------------------------------------------#主函数,使用pygame框架,无限LOOP对各种事件然后相应处理

#------------------------------------------------def main():globalparam

#pygame.mixer.music.play(-1)

clock=pygame.time.Clock()whileTrue:

#这段event代码是必须的,哪怕在这个程序中不需要,不执行的话整个框架转不动for event in pygame.event.get():if event.type ==QUIT:

sys.exit()

#画面按钮按下后,修改param.STATUS,实际动作这里实现if param.STATUS == 100:

#退出按钮if tk.messagebox.askokcancel('提示', '要退出画面吗'):breakparam.STATUS= 0elif param.STATUS== 10:

pass

elif param.STATUS== 0:

res=Eight_queen.queen_next_rows()if res !=None:

param.cmg.printAll(res)else:

STATUS= 10#显示游戏画面

pygame.display.flip()

#设置帧率:长期画面不操作,设置成最闲if param.STATUS == 0:

clock.tick(param.TICK_STEP)else:

clock.tick(param.TICK_NORMAL)

root.update()

main()

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现一个图形界面的爬虫,可以使用Python中的Tkinter库或PyQt等GUI库。以下是一个使用Tkinter库的爬虫界面的示例代码: ```python import tkinter as tk import requests from bs4 import BeautifulSoup class WebScraperGUI: def __init__(self, master): self.master = master self.master.title("Web Scraper") self.master.geometry("400x300") self.url_label = tk.Label(self.master, text="URL:") self.url_label.pack() self.url_entry = tk.Entry(self.master, width=50) self.url_entry.pack() self.results_text = tk.StringVar() self.results_text.set("Results will be displayed here.") self.results_label = tk.Label(self.master, textvariable=self.results_text) self.results_label.pack() self.scrape_button = tk.Button(self.master, text="Scrape", command=self.scrape) self.scrape_button.pack() def scrape(self): url = self.url_entry.get() response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") results = [] for link in soup.find_all("a"): results.append(link.get("href")) self.results_text.set("\n".join(results)) if __name__ == "__main__": root = tk.Tk() scraper_gui = WebScraperGUI(root) root.mainloop() ``` 这个程序创建了一个简单的GUI界面,包括一个标签、一个文本框、一个按钮和一个标签用于显示爬取结果。在点击“Scrape”按钮时,程序会使用Requests库发送HTTP请求,然后使用BeautifulSoup库解析HTML文档并找到所有链接的href属性,并将结果显示在GUI界面的标签中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值