TKINTER创建了一个程序实现办公需要,根据要办理的业务选择菜单上的功能!点击菜单栏上数据库下面的标签会弹出一个QDIALOG做出的窗口,但是不能同时打开2个窗口,也不能打开一个窗口后进行其他的简单的程序操作,比如也不可以点击标签打开我想要的文件地址,只有关闭窗口后才可以进行其他的操作,所以我考虑用进程
但是用了后不起作用,可能是我水平问题,错误代码如下
Fatal Python error: PyEval_RestoreThread: NULL tstate
Current thread 0x0000420c (most recent call first):
File "c:\Users\Administrator\Desktop\u65b0\u7a0b\u529e\u516c\u8f6f\u4ef6\u5347\u7ea7\u5feb\u901f\u7248\items_edit.py", line 316 in main
我的程序代码如下:
from tkinter import *
import tkinter as tk
import multiprocessing
import pr,sys,datetime,os
from importlib import reload
from tkinter import scrolledtext
from datetime import date
class Project:
def __init__(self):
reload(pr)
self.d=datetime.date.today()
def multi_it(self, x):
print(x)
t = multiprocessing.Process(target=self.menu(x))
t.start()
def create_button(self):
menubar=Menu(self.top)
fmenu2=Menu(self.top)
fmenu2.add_command(label='产品数据库增删改查',command=lambda x=12:self.multi_it(x))
fmenu2.add_command(label='客户数据库增删改查',command=lambda x=13:self.multi_it(x))
fmenu2.add_command(label='包装数据库增删改查',command=lambda x=14:self.multi_it(x))
fmenu2.add_command(label='供应商数据库增删改查',command=lambda x=18:self.multi_it(x))
fmenu3=Menu(self.top)
fmenu3.add_command(label='游乐场',command=lambda x=1: self.dingwei(x))
fmenu3.add_command(label='客户分区报价中心',command=lambda x=2: self.dingwei(x))
fmenu3.add_command(label='编织绳',command=lambda x=3: self.dingwei(x))
self.top['menu']=menubar
def dingwei(self,x):
choice=x
if choice == 1:
path_doc= r'E:\2 体育 健身 娱乐\0 游乐场'
if choice == 2:
path_doc=r'E:\2 体育 健身 娱乐\0 游乐场\05 客户开发\00 客户分区报价中心'
if choice == 3:
path_doc=r'E:\5 Plastic rope\01 编织绳'
os.startfile(path_doc)
def menu(self,x):
self.mchoice=x
if self.mchoice == 12:
from items_edit import window
window.main(self)
elif self.mchoice == 13:
from customer_info_edit import window
window.main(self)
elif self.mchoice == 14:
from pkg_info_edit import window
window.main(self)
elif self.mchoice == 18:
from supplier_info_edit import window
window.main(self)
def main(self):
class StdoutRedirector(object):
def __init__(self, text_widget):
self.text_space = text_widget
self.stdoutbak = sys.stdout
self.stderrbak = sys.stderr
def write(self, str):
self.text_space.insert(END, "\n"+str)
self.text_space.see(END)
self.text_space.update()
def restoreStd(self):
sys.stdout = self.stdoutbak
sys.stderr = self.stderrbak
def flush(self):
pass
self.top=Tk()
self.top.iconbitmap('logo01.ico')
self.top.wm_title("新程业务助手T.22.0")
self.top.config(bg='white')
self.top.geometry("950x500+300+100")
self.create_button()
global t,a,b
t = scrolledtext.ScrolledText(self.top,relief="solid", width=260, height=450) # 创建多行文本控件
t.pack() # 布局在窗体上
t.configure(font=("Courier", 12, "italic"))
a=tk.END
t.tag_add('tag',a) #申明一个tag,在a位置使用
t.tag_config('tag',foreground='red') #设置tag即插入文字的大小,颜色等
b=tk.END
t.tag_add('tag1',b) #申明一个tag,在a位置使用
t.tag_config('tag1',foreground='blue') #设置tag即插入文字的大小,颜色等
output = sys.stdout # 二级备份
sys.stdout = StdoutRedirector(t)
self.top.mainloop()
if __name__ == '__main__':
project1 = Project()
project1.main()
我想怎么样用进程实现同时可以打开两个QDIALOG窗口,注意我不是一定要打开两个窗口,是根据办公需要,有时候不需要打开,如果不用进程也没什么别的好的办法了吧!