CSDN问答——精选问答Vol.5
Posted 问答小精灵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSDN问答——精选问答Vol.5相关的知识,希望对你有一定的参考价值。
《精选问答》挑选CSDN问答频道每周最新最热的优质回答,为大家提供可信赖的优质解答,点击查看更多已解决问题
目录
2、python建立窗体后,使用mainloop显示窗体,如何使用多线程在窗体中实时显示时间?
4、vue怎么给input赋值,已经v-model了一个变量,怎么再绑定一个?
6、html/jsp如何从一个页面传值到另一页面,怎样点击后,跳转并传一个值到下一个界面?
7、能不能找到规律或者数学公式?能知道随机一个数位于第几排(N几)?
1、 利用Matlab求门函数频谱提示错误
问题描述:
利用Matlab绘制门函数 g2 (t) 的频谱,我的程序先写了门函数代码
function y=gate(t,w)
y=(abs(t)<=1).*(1).*exp(-j*w*t);
之后利用quad求
w=linspace(-20,20,256);
N=length(w);F=zeros(1,N);
for k=1:N
F(k)=quad(@gate,-2,2)
end
plot(w,real(F));
xlabel('\\omega');ylabel('F(j\\omega)');
然后就开始报错,报错信息:
>> project4
输入参数的数目不足。
出错 gate (line 2)
y=(abs(t)<=1).*(1).*exp(-j*w*t);
出错 quad (line 67)
y = f(x, varargin{:});
出错 project4 (line 4)
F(k)=quad(@gate,-2,2)
>>
解决方案——来自@CSDN专家-Matlab_Fans的回答
问题是括号不匹配,gate函数改成:
function y=gate(t,w)
y=(abs(t)<=1).*(1).*exp(-j*w*t);
求解段修改为:
w=linspace(-20,20,256);
N=length(w);F=zeros(1,N);
for k=1:N
w0 = w(k);
g = @(t) gate(t,w0);
F(k) = quad(g,-2,2);
end
plot(w,real(F));
xlabel('\\omega');ylabel('F(j\\omega)');
本题更多回答戳链接:https://ask.csdn.net/questions/7444205
2、python建立窗体后,使用mainloop显示窗体,如何使用多线程在窗体中实时显示时间?
问题描述:
python建立窗体后,使用mainloop显示窗体,如何使用多线程在窗体中实时显示时间?
class MainForm(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent,
id,
title="test",
pos=(200, 150),
size=(900, 600))
MainForm_Panel = wx.Panel(self)
MainForm_Font = wx.Font(11, wx.DEFAULT, wx.DEFAULT, wx.NORMAL)
self.MainForm_SystemTime_Label = wx.StaticText(MainForm_Panel,
id,
label=datetime.datetime.now().strftime(GUIParameter.system_time),
pos=(705, 540),
style=wx.TE_RIGHT)
if __name__ == '__main__':
app = wx.App()
frame = MainForm(parent=None, id=-1)
frame.Show()
app.MainLoop()
解决方案——来自@CSDN专家-黄老师的回答
import threading
import wx
import datetime
class MainForm(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent,
id,
title="test",
pos=(200, 150),
size=(900, 600))
self.id = id
self.MainForm_Panel = wx.Panel(self)
MainForm_Font = wx.Font(11, wx.DEFAULT, wx.DEFAULT, wx.NORMAL)
self.MainForm_SystemTime_Label = wx.StaticText(self.MainForm_Panel,
self.id,
label=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
pos=(705, 540),
style=wx.TE_RIGHT)
def task(frame):
while 1:
frame.MainForm_SystemTime_Label.Label = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
if __name__ == '__main__':
app = wx.App()
frame = MainForm(parent=None, id=-1)
frame.Show()
t = threading.Thread(target=task, args=(frame,))
t.setDaemon(True)
t.start()
app.MainLoop()
本题更多回答戳链接:https://ask.csdn.net/questions/7445371
3、WPF多线程创建Image控件报错问题
问题描述:
这个方法是利用PDF控件将每页转成Image列表返回,本来是没用到Task线程操作的,但是pdf.ConvertPageToPNGMemoryStream()这个方法每页转换耗时将近1秒,页数少还好说,页数多了就会卡界面,所以想用线程提高速度,然后遇到这个奇怪的现象,假设PDF只有1页,单步调试中会报错,注释下面这句的 i = 2 ?就很奇怪明明循环只跑1次就结束了啊,能否帮忙解答一下,或者这个方法正确的优化写法是怎样的
private List<Image> PDFToImageList(Pdf.Document pdf)
{
List<Image> lst = new List<Image>();
Task[] tasks = new Task[pdf.Pages.Count];
for (int i = 1; i <= pdf.Pages.Count; i++)
{
Image img = new Image();
tasks[i - 1] = Task.Factory.StartNew(() =>
{
System.Windows.Media.Imaging.BitmapImage bitmapImage = new System.Windows.Media.Imaging.BitmapImage();
//调试报异常越界,i=2?
using (MemoryStream stream = pdf.ConvertPageToPNGMemoryStream(pdf.Pages[i]))
{
stream.Position = 0;
bitmapImage.BeginInit();
bitmapImage.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = stream;
bitmapImage.DecodePixelWidth = (int)(this.noticeWidth * 1.3);
bitmapImage.EndInit();
bitmapImage.Freeze();
container.Dispatcher.Invoke(() =>
{
img.Source = bitmapImage;
lst.Add(img);
});
}
});
}
Task.WaitAll(tasks);
return lst;
}
解决方案——来自@CSDN专家-showbo的回答
有点像js的闭包问题,task是异步执行的,但是匿名函数中引用到了i,task没执行for就已经执行完毕了,这样执行线程的时候i已经是for循环后的值2越界了。
怕界面假死,用一个线程来处理就行了吧,干嘛用多线程,多线程的话看你代码也会有bug,线程的执行完毕先后不一定是完全按照for中的先后,所以也会出现转为图片顺序和pdf不一致
改成下面的单线程
private List<Image> PDFToImageList(Pdf.Document pdf)
{
List<Image> lst = new List<Image>();
var task = Task.Factory.StartNew(() =>
{
for (int i = 1; i <= pdf.Pages.Count; i++)
{
Image img = new Image();
System.Windows.Media.Imaging.BitmapImage bitmapImage = new System.Windows.Media.Imaging.BitmapImage();
//调试报异常越界,i=2?
using (MemoryStream stream = pdf.ConvertPageToPNGMemoryStream(pdf.Pages[i]))
{
stream.Position = 0;
bitmapImage.BeginInit();
bitmapImage.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = stream;
bitmapImage.DecodePixelWidth = (int)(this.noticeWidth * 1.3);
bitmapImage.EndInit();
bitmapImage.Freeze();
container.Dispatcher.Invoke(() =>
{
img.Source = bitmapImage;
lst.Add(img);
});
}
}
});
Task.WaitAll(task);
return lst;
}
一定要多线程可以用下面的,将i当做参数传入
private List<Image> PDFToImageList(Pdf.Document pdf)
{
List<Image> lst = new List<Image>();
Task[] tasks = new Task[pdf.Pages.Count];
for (int i = 1; i <= pdf.Pages.Count; i++)
{
tasks[i - 1] = Task.Factory.StartNew((objI) =>
{
int index = (int)objI;
lst[index] = new Image();//使用下标来定位,防止生成顺序错误,而且放到task里面,而不是外面Image img=new Image然后引用img对象,这样没有越界,但是只有最后页面有图片,什么原因和i的问题一样
System.Windows.Media.Imaging.BitmapImage bitmapImage = new System.Windows.Media.Imaging.BitmapImage();
//调试报异常越界,i=2?
using (MemoryStream stream = pdf.ConvertPageToPNGMemoryStream(pdf.Pages[index]))
{
stream.Position = 0;
bitmapImage.BeginInit();
bitmapImage.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = stream;
bitmapImage.DecodePixelWidth = (int)(this.noticeWidth * 1.3);
bitmapImage.EndInit();
bitmapImage.Freeze();
container.Dispatcher.Invoke(() =>
{
lst[index].Source = bitmapImage;//使用下标来定位,防止生成错落
});
}
}, i);
}
Task.WaitAll(tasks);
return lst;
}
本题更多回答戳链接:https://ask.csdn.net/questions/7443406
4、vue怎么给input赋值,已经v-model了一个变量,怎么再绑定一个?
问题描述:
做了一个数据添加的页面,input绑定的city.name是数据库的字段,我从右边搜索页面传来了一个城市name值,怎么将这个值赋给city.name。。。这样可以实现父亲页面通过传值按钮,子页面获取到数值,不需要再手动输入。
我通过继承props,可以在左边页面拿到,可以打印出来。把v-model换成继承的值,可以达到想要的效果但是添加不到数据库了,因为数据库字段是city.name,现在想要做到的就是v-model不变,给他赋一个继承过来的值
解决方案——来自@风雪一更的回答
子页面通过props获取父页面的值name1,然后通过watch监听name1,并将其赋值给city.name
watch:{
name1(newValue){
this.city.name = newValue;
}
}
本题更多回答戳链接:https://ask.csdn.net/questions/7446728
5、opencv+python提取轮廓例程报错问题
代码如下:
import cv2
import numpy as np
img=cv2.imread('test.jpg')
imgray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh=cv2.threshold(imgray,127,255,0)
image,contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('imageshow',image) # 显示返回值image,其实与输入参数的thresh原图没啥区别
cv2.waitKey()
print(np.size(contours)) # 得到该图中总的轮廓数量
print(contours[0]) # 打印出第一个轮廓的所有点的坐标, 更改此处的0,为0--(总轮廓数-1),可打印出相应轮廓所有点的坐标
print(hierarchy) #打印出相应轮廓之间的关系
img=cv2.drawContours(img,[contours[0]],-1,(0,255,0),10) #标记处编号为0的轮廓,此处img为三通道才能显示轮廓
cv2.imshow('drawimg',img)
cv2.waitKey()
cv2.destroyAllWindows()
报错信息:
Traceback (most recent call last):
File "D:\\lpcj\\Qt-Camera\\lunkuo.py", line 14, in <module>
image,contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2
解决方案——来自@爱晚乏客游的回答
第六行只有两个返回值的,你写的三个返回值是旧版本的opencv,应该是2.x和3.4之前的写法吧,目前的4.x版本都是两个返回值,第一个代表轮廓,第二个代表轮廓关系
contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
而这句报错ValueError: not enough values to unpack (expected 3, got 2),的意思就是没有足够对应的值,你希望返回值是三个,但是实际上只有两个返回值(expected 3, got 2)
本题更多回答戳链接:https://ask.csdn.net/questions/7445138
6、html/jsp如何从一个页面传值到另一页面,怎样点击后,跳转并传一个值到下一个界面?
问题描述:
html/jsp如何从一个页面传值到另一页面,怎样点击后,跳转并传一个值到下一个界面?
解决方案——来自@li.siyuan的回答
href = "Booking_2.jsp?name=zhangsan" jsp页面 使用 el表达式 ${param.name} 就可以获取到了
本题更多回答戳链接:https://ask.csdn.net/questions/7444095
7、能不能找到规律或者数学公式?能知道随机一个数位于第几排(N几)?
能不能找到规律或者数学公式?能知道随机一个数位于第几排(N几)?例如290
解决方案——来自@CX0405的回答
290 在13行 想看哪个数在第几行在list.contains()里放几就行
本题更多回答戳链接:https://ask.csdn.net/questions/7440950
以上是关于CSDN问答——精选问答Vol.5的主要内容,如果未能解决你的问题,请参考以下文章