精华内容
下载资源
问答
  • 停止按钮
    2021-04-18 07:46:24

    编辑:我改写了一下我的问题,因为我现在对问题有了更好的理解,第一稿中有很多不必要的信息。MATLAB GUI停止按钮问题

    我正在创建一个独立的MATLAB应用程序,它需要一个可以启动和停止循环脚本的切换按钮。

    在此基础上helpful video,我能够实现我的gui.m文件这样的想法是这样的:

    function startBtn_Callback(hObject, eventdata, handles)

    if get(handles.startBtn,'Value')

    set(handles.startBtn,'String','Stop Recording');

    else

    set(handles.startBtn,'String','Start Recording');

    end

    while get(handles.startBtn,'Value');

    disp('looping..');

    pause(.5);

    end

    这个脚本工作正常,但是当我更换while循环功能的内容我想循环,按钮停止工作。它在我按下时仍然会切换,但只有在第一次按下按钮时才会调用回调。这是我的最终代码的样子:

    function startBtn_Callback(hObject, eventdata, handles)

    if get(handles.startBtn,'Value')

    set(handles.startBtn,'String','Stop Recording');

    pause(.1);

    else

    set(handles.startBtn,'String','Start Recording');

    disp('Recording Stopped')

    end

    while get(handles.startBtn,'Value');

    myFunction();

    end

    当我按下开始按钮时,此回调运行,循环开始。需要pause(.1)才能更改文本 - 如果我不包含暂停,循环将启动,但按钮上的文本不会更改。

    之后,没有后续的按钮推动任何事情。该按钮在GUI上切换,但startBtn_Callback永远不会被调用,并且循环无限期地运行。这是一个问题,因为我的最终用户将无法访问MATLAB控制台。

    为了给我更多关于我的功能的信息:它记录音频5秒钟,做一些处理,然后输出一些图形的方法。我希望这个循环能够无限地重复,直到用户停止。

    我认为问题是MATLAB似乎一次只能运行一个函数,所以当myFunction()运行时,回调无法启动。它在第一个例子中工作的原因是因为循环调用之间存在暂停。我不能有这样的停顿,因为项目的要求是记录每一秒钟。

    如何为此过程制作可靠的停止按钮?

    我正在运行MATLAB R2012b 32位。

    2013-01-15

    Cbas

    更多相关内容
  • vba点击开始按钮 在控件中变化显示数字 点击停止不再变化 ,并显示获得的数字
  • 在html 5中的audio标签中,只有暂停按钮,但没有停止按钮,其实为其增加也不麻烦,方法如下: 复制代码代码如下: HTMLAudioElement.prototype.stop = function() { this.pause(); this.currentTime = 0.0; } 其实...
  • 今天小编就为大家分享一篇解决pycharm py文件运行后停止按钮变成了灰色的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 控制电路中的紧急停止按钮,该用常开点NO还是常闭点NC?

    控制电路中的紧急停止按钮,该用常开点NO还是常闭点NC?

    紧急停止按钮”,简称急停按钮。顾名思义,就是当发生紧急情况的时候,使用者可以通过快速按下此按钮来达到保护人身或设备安全的控制装置。
    0.1
    那么,在控制系统中急停按钮到底该使用常开点NO还是常闭点NC呢?
    5
    不妨举例来分析一下:

    1. 假设急停按钮使用的是常开点NO,线路也是正常的,这时
      如果使用者遇到紧急情况,按下了急停按钮,是可以起到保护作用的;假设急停按钮某一端的线路由于年久失修断线了,而使用者却不知道这个情况,那么这时如果出现紧急情况,这个急停按钮就无法起到保护人身或设备的功能了。
    展开全文
  • vue开启/停止按钮切换

    千次阅读 2020-12-01 16:36:26
    vue开启/停止按钮切换 <el-table :data="tableData" ref="tableDatas" class="view_table" style="width: 100%" id="tableExcel" v-loading="loading" @row-click="rowClick" > <el-table-column...

    vue开启/停止按钮切换

     <el-table
          :data="tableData"
          ref="tableDatas"
          class="view_table"
          style="width: 100%"
          id="tableExcel"
          v-loading="loading"
          @row-click="rowClick"
        >
          <el-table-column
            prop="addTime"
            label="添加时间"
            align="center"
            min-width="120"
          ></el-table-column>
          ---------------
          <el-table-column fixed="right" 
           align="right" label="操作" 
           width="260" 
           class="tab_lastbtn">
            <template slot-scope="scope">
              <el-button
                type="primary"
                size="small"
                v-if="scope.row.state == 2"
                @click.stop="editStatus(1, scope.row)"
                >开启兑换</el-button
              >
              <el-button
                type="primary"
                size="small"
                v-if="scope.row.state == 1"
                @click.stop="editStatus(2, scope.row)"
                >结束兑换</el-button
              >
            </template>
          </el-table-column>
     </el-table>
    

    methods:

    //停止/开启
    editStatus(type, row) {
       this.$confirm(`确认${type === 1 ? "开启" : "结束"}兑换吗?`, "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning",
       })
         .then(() => {
           // put("/sys/integral/updateConvert?id=" + row.id + "&state=" + type).then(
           put("/sys/integral/updateConvert/" + row.id + "/" + type).then(
             (res) => {
               if (res.code === 200) {
                 console.log(res);
                 this.getData();
                 if (type === 1) {
                   this.$message.success("开启成功");
                 } else {
                   this.$message.success("关闭成功");
                 }
               } else {
                 this.$message.error(res.msg);
               }
             }
           );
         })
         .catch(() => {});
     },
    
    展开全文
  • 摘要:Flash源码,多媒体应用,播放器按钮,氏量按钮 运行环境:Flash8+
  • jquery多特效带播放停止按钮幻灯片
  • 我编写了一个python GUI,该Python GUI应该通过单击一个名为"开始"的按钮来创建和更新.csv文件,并应该通过单击另一个名为"停止"的按钮停止while循环,从而更新.csv。 但是,每当我运行GUI并单击"开始"时,它就会...

    我编写了一个python GUI,该Python GUI应该通过单击一个名为"开始"的按钮来创建和更新.csv文件,并应该通过单击另一个名为"停止"的按钮来停止while循环,从而更新.csv。 但是,每当我运行GUI并单击"开始"时,它就会冻结。 虽然,我看到.csv文件正在不断更新,但是我无法阻止.csv更新新行。 我只是简单地使用python 2.7和ubuntu终端运行代码,编写python filename.py。

    任何人都可以检查我的代码有什么问题吗?

    from Tkinter import *

    import datetime

    import sys

    import time

    import csv

    import math

    A1 = 0

    def csv_write(label):

    global A1

    A1 = 0

    A = str(datetime.datetime.now()) +".csv"

    start = time.time()

    elapsed = 0

    with open(A, 'wt') as filename:

    csv_writer = csv.writer(filename, delimiter=',')

    csv_writer.writerow(('IMU', 'Time', 'A.Sensor.X', 'A.Sensor.Y',   'A.Sensor.Z', 'G.Sensor.X', 'G.Sensor.Y',

    'G.Sensor.Z', 'M.Sensor.X', 'M.Sensor.Y', 'M.Sensor.Z',

    'IMU', 'Time', 'A.Sensor.X', 'A.Sensor.Y', 'A.Sensor.Z', 'G.Sensor.X', 'G.Sensor.Y',

    'G.Sensor.Z', 'M.Sensor.X', 'M.Sensor.Y', 'M.Sensor.Z',

    'IMU', 'Time', 'A.Sensor.X', 'A.Sensor.Y', 'A.Sensor.Z', 'G.Sensor.X', 'G.Sensor.Y',

    'G.Sensor.Z', 'M.Sensor.X', 'M.Sensor.Y', 'M.Sensor.Z',

    'IMU', 'Time', 'A.Sensor.X', 'A.Sensor.Y', 'A.Sensor.Z', 'G.Sensor.X', 'G.Sensor.Y',

    'G.Sensor.Z', 'M.Sensor.X', 'M.Sensor.Y', 'M.Sensor.Z',

    'IMU', 'Time', 'A.Sensor.X', 'A.Sensor.Y', 'A.Sensor.Z', 'G.Sensor.X', 'G.Sensor.Y',

    'G.Sensor.Z', 'M.Sensor.X', 'M.Sensor.Y', 'M.Sensor.Z',

    'IMU', 'Time', 'A.Sensor.X', 'A.Sensor.Y', 'A.Sensor.Z', 'G.Sensor.X', 'G.Sensor.Y',

    'G.Sensor.Z', 'M.Sensor.X', 'M.Sensor.Y', 'M.Sensor.Z'))

    while (A1==0):

    elapsed = str(time.time() - start)

    label['text']=elapsed

    csv_writer.writerow((1, 1, 2, 3,

    4, 5, 6,

    7,8, 9,

    1, 2, 3,

    4, 5, 6,

    7, 8,

    9, 1, 2,

    3, 4, 5,

    6, 7, 8,

    9, 0, 1,

    2, 3, 4,

    5, 6, 7,

    8, 9, 0,

    1, 2,

    3, 4, 5,

    6, 7, 8,

    9, 0, 1,

    2, 3,

    4, 5, 6,

    7, 8, 9,

    0, 1, 2,

    3, 4,

    5, 6, 7))

    def stop():

    global A1

    A1 = 1

    root = Tk()

    frame = Frame(root)

    frame.pack()

    root.title("connect and get sensor data")

    root.geometry("500x500")  # You want the size of the app to be 500x500

    root.resizable(0, 0)  # Don't allow resizing in the x or y direction

    label = Label(root, text="Welcome!", fg="black", font="Verdana 15 bold")

    label.pack(side=TOP, padx=5 )

    button = Button(root, text='Start', width=25, command=lambda: csv_write(label))

    button1 = Button(root, text='Stop', width=25, command=lambda: stop())

    button1.pack(side=BOTTOM, pady=10)

    button.pack(side=BOTTOM, pady=10)

    root.mainloop()

    请记住,文件名不能包含:,因此您的代码不会生成文件,但会显示错误

    当使用tkinter这样的GUI工具包时,程序的工作原理与常规python脚本不同。

    GUI依赖于事件循环进行更新。因此,您的代码必须以回调或超时函数的形式适合事件循环。此类回调不应花费太长时间,因为它们是从事件循环执行的。如果他们花费足够长的时间,鼠标和键盘事件将会堆积。由于GUI没有响应,因此这将很明显。

    有几种解决方法。

    最简单的方法是将更新过程分成几小段,例如一行。您将当前行的索引保留为全局变量。

    在一个函数中,您将索引行写入文件,增加索引。该功能注册为超时功能(使用tkinter.Tk的after方法)。除非A1 == 1,否则该函数应该做的最后一件事是再次重新注册自身(使用after)。在Start按钮的回调中,使用after安排更新功能。

    另外两个选择是使用多线程进行多处理。但是,这些要复杂得多。对于新手或相对简单的任务,我都不会推荐它们。

    让我们谈谈在另一个线程中进行更新。这可能很复杂,因为tkinter不是线程安全的;您不应从第二个线程调用tkinter。由于两个线程都可以看到和更改相同的全局变量,因此您必须谨慎使用它们。您应该使用锁来保护可以从两个线程读取或更新的变量(例如互斥锁)。也就是说,在两个线程中,您都应该在更改变量之前获取锁,并在进行更改后释放锁。如果变量是可变数据结构,则即使从锁中读取时也应谨慎使用。此外,Python3在划分不同线程之间的处理器时间方面比Python2更好。因此,如果使用后者,则可能无法按预期工作。

    第三种选择是在不同的过程中进行编写。这意味着您必须使用进程间通信,该通信也必须平稳地放入事件循环中。

    下面是我编写的使用after的示例程序。这是用于ms-windows的简单查找和替换实用程序。原始文件托管在github上。

    一些注意事项:

    我正在定义一个从tk.Tk继承的类作为用户界面。这使得正确封装数据变得容易。所有回调方法都会自动访问该对象的属性。您可以在不使用类的情况下执行tkinter程序,但这样做有时会比较混乱。

    __init__方法创建对象(和必要的属性),但是我将创建窗口分成了create_window方法。

    replace_step方法正在完成工作的第一步。

    回调方法的名称以_cb结尾。这只是使它们更易于查找的约定。

    main函数在启动GUI之前处理命令行参数。

    这是代码。希望对你有帮助。

    #!/usr/bin/env python3

    # file: far.py

    # vim:fileencoding=utf-8:fdm=marker:ft=python

    #

    # Copyright ? 2018 R.F. Smith .

    # SPDX-License-Identifier: MIT

    # Created: 2018-02-27T23:38:17+0100

    # Last modified: 2018-04-17T00:11:57+0200

    from tkinter import filedialog

    from tkinter import ttk

    from tkinter.font import nametofont

    import argparse

    import os

    import shutil

    import sys

    import tkinter as tk

    __version__ = '0.1'

    class FarUI(tk.Tk):

    def __init__(self, rootdir='', findname='', replacement=''):

    tk.Tk.__init__(self, None)

    self.running = False

    self.finditer = None

    self.create_window()

    self.tree['text'] = rootdir

    self.find.insert(0, findname)

    self.replace['text'] = replacement

    def create_window(self):

    """Create the GUI"""

    # Set the font.

    default_font = nametofont("TkDefaultFont")

    default_font.configure(size=12)

    self.option_add("*Font", default_font)

    # General commands and bindings

    self.bind_all('q', self.quit_cb)

    self.wm_title('Find and Replace v' + __version__)

    self.columnconfigure(4, weight=1)

    self.rowconfigure(4, weight=1)

    # First row

    ftxt = ttk.Label(self, text='Find:')

    ftxt.grid(row=0, column=0, sticky='w')

    fe = ttk.Entry(self, justify='left')

    fe.grid(row=0, column=1, columnspan=4, sticky='ew')

    self.find = fe

    # Second row

    treetxt = ttk.Label(self, text='In tree:')

    treetxt.grid(row=1, column=0, sticky='w')

    te = ttk.Label(self, justify='left')

    te.grid(row=1, column=1, columnspan=4, sticky='ew')

    tb = ttk.Button(self, text="browse...", command=self.tree_cb)

    tb.grid(row=1, column=5, columnspan=2, sticky='ew')

    self.tree = te

    # Third row

    reptxt = ttk.Label(self, text='Replace with:')

    reptxt.grid(row=2, column=0, sticky='w')

    re = ttk.Label(self, justify='left')

    re.grid(row=2, column=1, columnspan=4, sticky='ew')

    rb = ttk.Button(self, text="browse...", command=self.replace_cb)

    rb.grid(row=2, column=5, columnspan=2, sticky='ew')

    self.replace = re

    # Fourth row

    run = ttk.Button(self, text="run", command=self.start_replace_cb)

    run.grid(row=3, column=0, sticky='ew')

    stop = ttk.Button(self, text="stop", command=self.stop_replace_cb, state=tk.DISABLED)

    stop.grid(row=3, column=1, sticky='w')

    self.runbutton = run

    self.stopbutton = stop

    qb = ttk.Button(self, text="quit", command=self.destroy)

    qb.grid(row=3, column=2, sticky='w')

    ttk.Label(self, justify='left', text='Progress: ').grid(row=3, column=3, sticky='w')

    progress = ttk.Label(self, justify='left', text='None')

    progress.grid(row=3, column=4, columnspan=2, sticky='ew')

    self.progress = progress

    # Fifth row

    message = tk.Text(self, height=4)

    message.grid(row=4, column=0, columnspan=6, sticky='nsew')

    s = ttk.Scrollbar(self, command=message.yview)

    s.grid(row=4, column=6, sticky='nse')

    message['yscrollcommand'] = s.set

    self.message = message

    def quit_cb(self, event):

    """

    Callback to handle quitting.

    This is necessary since the quit method does not take arguments.

    """

    self.running = False

    self.quit()

    def tree_cb(self):

    rootdir = filedialog.askdirectory(

    parent=self, title='Directory where to start looking', mustexist=True

    )

    self.tree['text'] = rootdir

    def replace_cb(self):

    replacement = filedialog.askopenfilename(parent=self, title='Replacement file')

    self.replace['text'] = replacement

    def start_replace_cb(self):

    rootdir = self.tree['text']

    filename = self.find.get()

    replacement = self.replace['text']

    if self.running or not rootdir or not filename or not replacement:

    self.message.delete('1.0', tk.END)

    self.message.insert(tk.END, 'Missing data!')

    return

    self.running = True

    self.message.delete('1.0', tk.END)

    self.message.insert(tk.END, 'Starting replacement

    ')

    self.runbutton['state'] = tk.DISABLED

    self.stopbutton['state'] = tk.NORMAL

    self.finditer = os.walk(rootdir)

    self.after(1, self.replace_step)

    def replace_step(self):

    if not self.running:

    return

    try:

    path, _, files = self.finditer.send(None)

    rootlen = len(self.tree['text']) + 1

    # Skip known revision control systems directories.

    for skip in ('.git', '.hg', '.svn', '.cvs', '.rcs'):

    if skip in path:

    self.progress['text'] = 'skipping ' + path[rootlen:]

    return

    if len(path) > rootlen and path[rootlen] != '.':

    self.progress['text'] = 'processing ' + path[rootlen:]

    filename = self.find.get()

    if filename in files:

    original = path + os.sep + filename

    replacement = self.replace['text']

    repfile = os.path.basename(replacement)

    dest = path + os.sep + repfile

    self.message.insert(tk.END,"Removing '{}'

    ".format(original))

    os.remove(original)

    self.message.insert(tk.END,"Copying '{}' to '{}'

    ".format(replacement, dest))

    shutil.copy2(replacement, dest)

    self.after(1, self.replace_step)

    except StopIteration:

    self.stop()

    self.message.insert(tk.END, 'Finished replacement.

    ')

    def stop(self):

    self.running = False

    self.finditer = None

    self.runbutton['state'] = tk.NORMAL

    self.stopbutton['state'] = tk.DISABLED

    self.progress['text'] = 'None'

    def stop_replace_cb(self):

    self.stop()

    self.message.insert(tk.END, 'Replacement stopped by user.

    ')

    def main():

    """Main entry point for far.py"""

    # Parse the arguments.

    parser = argparse.ArgumentParser(description=__doc__)

    parser.add_argument(

    '-d', '--rootdir', type=str, default=os.getcwd(), help='Directory to start looking in.'

    )

    parser.add_argument('-f', '--findname', type=str, default='', help='Name of the file to find.')

    parser.add_argument(

    '-r', '--replacement', type=str, default='', help='Path of the replacement file.'

    )

    parser.add_argument('-v', '--version', action='version', version=__version__)

    args = parser.parse_args(sys.argv[1:])

    if not args.rootdir.startswith(os.sep):

    args.rootdir = os.getcwd() + os.sep + args.rootdir

    # Create the UI.

    root = FarUI(args.rootdir, args.findname, args.replacement)

    root.mainloop()

    if __name__ == '__main__':

    # Detach from the terminal on POSIX systems.

    if os.name == 'posix':

    if os.fork():

    sys.exit()

    # Run the program.

    main()

    您能给我一个示例代码,我该如何使用after方法或您建议的其他方式创建和更新.csv? 您是对的,我是第一次使用tkinter。

    @AhasanRatul添加了示例。 我认为这是编写tkinter程序的现代方法。 多处理和(在较小程度上)多线程是功能强大的工具,每个工具都有自己的职责。 但是文档中的现有示例并不十分适合在GUI工具箱应用程序的上下文中使用它们。 因此,我建议您先单独学习它们,然后再将它们集成到GUI程序中。 这将使您的生活更轻松。 :-)

    展开全文
  • #资源达人分享计划#
  • 西门子通过起动及停止按钮实现S120驱动装置的控制pdf,西门子通过起动及停止按钮实现S120驱动装置的控制
  • <!... <title>Document function showClock(){ ...学习了怎么获取当前时间并让它显示出来,还知道如何让时间停止,如何在继续。 转载于:https://my.oschina.net/u/3841968/blog/1814494
  • MM440使用三线控制,一个启动按钮,一个停止按钮控制变频器运行zip,MM440使用三线控制,一个启动按钮,一个停止按钮控制变频器运行
  • 美国邦纳_E-STOP 紧急停止按钮pdf,
  • #解决方法: 如果服务不是正常停止,那么服务有些线程还在运行,这种情况下,启动、暂停、停止按钮不能点击。 这个时候,就需要手动找到并关闭相关线程,成功关闭后,相关就按钮都能正常点击了。 ...
  • 在这个小程序中,需要把images文件夹下图片的命名设置为有顺序的,1、2、3…… 代码如下: [removed] var imgnumb = 1; function imgfor() { imgnumb++; document.getElementById(‘img1’).setAttribute(‘src’, ...
  • 调试一段循环更新数据库的程序时,在更新语句处设置了一个断点,明明在更新了一条数据后停止了Debug,但是数据库里的数据却更新了2条。。 IntelliJ IDEA版本信息: IntelliJ IDEA 2019.3.3 (Ultimate Edition) Build...
  • 我一直到处都是(我想)并且似乎找不到在html5音频控制器中调用停止事件的方法.我的音频控制器有一个播放列表,每个音轨在选中时播放,或者循环播放每个音轨到下一个音轨.还有一个下一个按钮可以工作.我的播放/暂停按钮...
  • 最近在使用mysql的时候发现mysql服务器启动、暂停、停止按钮不能点击,是灰色。 查询网上的文章发现,如果服务不是正常停止,那么服务有些线程还在用,就需要手动找到并关闭线程即可。成功关闭后,那么几个按钮都能...
  • 给大家介绍了JS实现按钮控制计时开始和停止功能,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下吧
  • 汽车启动/停止按钮功能原理启动/停止按钮也就是一键启动按钮。使用启动/停止按钮可以切换总线端(顺序:总线端KL.30B→总线端KL.15→总线端KL.30B,仅当带有自动变速箱的车辆未操作制动踏板杆以及带有手动变速箱的...
  • 但是新建的普通用户需要启动和停止mysql和MongoDB等系统服务时,发现启动和停止按钮都是灰色的,根本就点击不了。只有拥有管理员权限的账户才能启动/停止系统服务。之前找了好多资料都没有解决,偶然看到一个方法...
  • idea的tomcat停止按钮消失了怎么调出来,启动按钮和debug启动按钮都在
  • 2. 右上角的停止按钮变成灰色了(应该是红色)   解决办法:在右上角的下拉三角头,打开 edit configurations,把里面的 run with python console 前面的勾去掉,然后点ok 出去再次运行就可以啦
  • 1.在视图选项卡中,鼠标右键,勾选工具条(其他试图同理)
  • LabVIEW实现应用程序停止或退出

    千次阅读 2022-04-04 12:51:44
    我们在做应用程序开发时,最后必然会用到应用程序停止或退出功能,本篇博文将分享实用LabVIEW如何实现应用程序停止或退出。
  • 我用Tkinter制作了一个图形用户界面,有两个主按钮:“开始”和“停止”。请您就如何使用“停止按钮终止“开始”按钮为以下代码调用的已运行功能提供建议?在正如您所期望的那样,当“启动”功能运行时,整个窗口...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 216,514
精华内容 86,605
关键字:

停止按钮

友情链接: 34234.zip