CSDN问答——精选问答Vol.5

Posted 问答小精灵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSDN问答——精选问答Vol.5相关的知识,希望对你有一定的参考价值。

《精选问答》挑选CSDN问答频道每周最新最热的优质回答,为大家提供可信赖的优质解答,点击查看更多已解决问题

目录

1、 利用Matlab求门函数频谱提示错误

2、python建立窗体后,使用mainloop显示窗体,如何使用多线程在窗体中实时显示时间?

3、WPF多线程创建Image控件报错问题

4、vue怎么给input赋值,已经v-model了一个变量,怎么再绑定一个?

5、opencv+python提取轮廓例程报错问题

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的主要内容,如果未能解决你的问题,请参考以下文章

CSDN问答——精选问答Vol.8

CSDN问答——精选问答Vol.7

CSDN问答——精选问答Vol.9

CSDN问答——精选问答Vol.11

CSDN问答——精选问答Vol.4

CSDN问答——精选问答Vol.6